128 lines
No EOL
4 KiB
C#
128 lines
No EOL
4 KiB
C#
// WingsEmu
|
|
//
|
|
// Developed by NosWings Team
|
|
|
|
using System;
|
|
using System.ComponentModel;
|
|
using Microsoft.Extensions.Logging;
|
|
using Serilog;
|
|
using Serilog.Events;
|
|
using Serilog.Sinks.SystemConsole.Themes;
|
|
|
|
namespace PhoenixLib.Logging
|
|
{
|
|
public class SerilogLogger : ILogger
|
|
{
|
|
private readonly Serilog.ILogger _logger;
|
|
|
|
public SerilogLogger() => _logger = CreateLogger(LogLevel.Information);
|
|
|
|
public void Debug(string msg)
|
|
{
|
|
_logger.Debug(msg);
|
|
}
|
|
|
|
public void Debug(string msg, Exception ex)
|
|
{
|
|
_logger.Debug(msg, ex);
|
|
}
|
|
|
|
public void DebugFormat(string msg, params object[] objs)
|
|
{
|
|
_logger.Debug(msg, objs);
|
|
}
|
|
|
|
public void Info(string msg)
|
|
{
|
|
_logger.Information(msg);
|
|
}
|
|
|
|
public void Info(string msg, Exception ex)
|
|
{
|
|
_logger.Information(msg, ex);
|
|
}
|
|
|
|
public void InfoFormat(string msg, params object[] objs)
|
|
{
|
|
_logger.Information(msg, objs);
|
|
}
|
|
|
|
public void Warn(string msg)
|
|
{
|
|
_logger.Warning(msg);
|
|
}
|
|
|
|
public void Warn(string msg, Exception ex)
|
|
{
|
|
_logger.Warning(msg, ex);
|
|
}
|
|
|
|
public void WarnFormat(string msg, params object[] objs)
|
|
{
|
|
_logger.Warning(msg, objs);
|
|
}
|
|
|
|
public void Error(string msg, Exception ex)
|
|
{
|
|
_logger.Error(ex, msg);
|
|
}
|
|
|
|
public void ErrorFormat(string msg, Exception ex, params object[] objs)
|
|
{
|
|
_logger.Error(ex, msg, objs);
|
|
}
|
|
|
|
public void Fatal(string msg, Exception ex)
|
|
{
|
|
_logger.Fatal(ex, msg);
|
|
}
|
|
|
|
internal static Serilog.ILogger CreateLogger(LogLevel logEventLevel = LogLevel.Debug)
|
|
{
|
|
LoggerConfiguration config = new LoggerConfiguration()
|
|
.Enrich.WithThreadId()
|
|
.Enrich.FromLogContext()
|
|
.WriteTo.Console(theme: AnsiConsoleTheme.Code,
|
|
outputTemplate: "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff}][{Level:u4}][Thread:{ThreadId}] {Message:lj} {NewLine}{Exception}");
|
|
|
|
string? logLevel = Environment.GetEnvironmentVariable("PHOENIX_LOG_LEVEL");
|
|
|
|
if (!string.IsNullOrEmpty(logLevel))
|
|
{
|
|
config.MinimumLevel.Is(logLevel.ToUpper() switch
|
|
{
|
|
"DEBUG" => LogEventLevel.Debug,
|
|
"INFO" => LogEventLevel.Information,
|
|
"INFORMATION" => LogEventLevel.Information,
|
|
"WARN" => LogEventLevel.Warning,
|
|
"WARNING" => LogEventLevel.Warning,
|
|
"FATAL" => LogEventLevel.Fatal,
|
|
"ERROR" => LogEventLevel.Error,
|
|
_ => throw new InvalidEnumArgumentException("PHOENIX_LOG_LEVEL authorized : Debug / Info / Warning / Error / Fatal")
|
|
});
|
|
}
|
|
else
|
|
{
|
|
config.MinimumLevel.Is(logEventLevel switch
|
|
{
|
|
LogLevel.Trace => LogEventLevel.Verbose,
|
|
LogLevel.Debug => LogEventLevel.Debug,
|
|
LogLevel.Information => LogEventLevel.Information,
|
|
LogLevel.Warning => LogEventLevel.Warning,
|
|
LogLevel.Error => LogEventLevel.Error,
|
|
LogLevel.Critical => LogEventLevel.Error,
|
|
LogLevel.None => LogEventLevel.Error,
|
|
_ => throw new ArgumentOutOfRangeException(nameof(logEventLevel), logEventLevel, null)
|
|
});
|
|
}
|
|
|
|
return config.CreateLogger();
|
|
}
|
|
}
|
|
|
|
public static class EnvironmentExtensions
|
|
{
|
|
public static bool IsFeatureActivated(string envVarName, bool defaultActivationState = false) =>
|
|
bool.TryParse(Environment.GetEnvironmentVariable(envVarName) ?? defaultActivationState.ToString(), out bool isActivated) && isActivated;
|
|
}
|
|
} |