using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.CompilerServices;
namespace CSharpToJavaScript.Utils;
///
/// Logging.
///
public static class Log
{
private static bool _SupportedOS = true;
///
/// Self-explanatory, Disable Console Colors.
///
///
/// Default: false
///
public static bool DisableConsoleColors { get; set; } = false;
///
/// Self-explanatory, Disable Console Output.
///
///
/// Default: false
///
public static bool DisableConsoleOutput { get; set; } = false;
static Log()
{
Trace.Listeners.Add(new ConsoleTraceListener());
//https://learn.microsoft.com/en-us/dotnet/api/system.console.foregroundcolor?view=net-9.0
if (OperatingSystem.IsAndroid() || OperatingSystem.IsBrowser() || OperatingSystem.IsIOS() || OperatingSystem.IsTvOS())
_SupportedOS = false;
}
///
/// Log a simple message.
///
/// Required. Custom message.
public static void WriteLine(string message)
{
if (DisableConsoleOutput == true)
return;
Trace.Write($"{DateTime.UtcNow.ToString("hh:mm:ss.fff")}: ");
Trace.WriteLine($"{message}");
}
///
/// Log an info message.
///
/// Required. Custom message.
public static void InfoLine(string message)
{
if (DisableConsoleOutput == true)
return;
Trace.Write($"{DateTime.UtcNow.ToString("hh:mm:ss.fff")}: ");
if (_SupportedOS && DisableConsoleColors == false)
Console.ForegroundColor = ConsoleColor.Green;
Trace.Write("Info: ");
if (_SupportedOS && DisableConsoleColors == false)
Console.ResetColor();
Trace.WriteLine($"\t{message}");
}
///
/// Log a warning message.
///
/// Required. Custom message.
/// Optional. Ignore
/// Optional. Ignore
/// Optional. Ignore
public static void WarningLine(string message, [CallerFilePath] string? file = null, [CallerMemberName] string? member = null, [CallerLineNumber] int line = 0)
{
if (DisableConsoleOutput == true)
return;
Trace.Write($"{DateTime.UtcNow.ToString("hh:mm:ss.fff")}: ");
if (_SupportedOS && DisableConsoleColors == false)
Console.ForegroundColor = ConsoleColor.Cyan;
Trace.WriteLine($"({line}){Path.GetFileName(file?.Replace("\\", "/"))}.{member}:");
if (_SupportedOS && DisableConsoleColors == false)
Console.ForegroundColor = ConsoleColor.Yellow;
Trace.Write("\tWarning: ");
if (_SupportedOS && DisableConsoleColors == false)
Console.ResetColor();
Trace.WriteLine($"{message}");
}
///
/// Log an error message.
///
/// Required. Custom message.
/// Optional. Ignore
/// Optional. Ignore
/// Optional. Ignore
public static void ErrorLine(string message, [CallerFilePath] string? file = null, [CallerMemberName] string? member = null, [CallerLineNumber] int line = 0)
{
if (DisableConsoleOutput == true)
return;
Trace.Write($"{DateTime.UtcNow.ToString("hh:mm:ss.fff")}: ");
if (_SupportedOS && DisableConsoleColors == false)
Console.ForegroundColor = ConsoleColor.Cyan;
string lineInfo = $"({line}){Path.GetFileName(file?.Replace("\\", "/"))}.{member}:";
Trace.WriteLine(lineInfo);
if (_SupportedOS && DisableConsoleColors == false)
Console.ForegroundColor = ConsoleColor.Red;
Trace.Write("\tERROR: ");
if (_SupportedOS && DisableConsoleColors == false)
Console.ResetColor();
Debug.Assert(false, $"{lineInfo} \tMessage: {message}");
Trace.WriteLine($"{message}");
}
}