using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Console; using Microsoft.Extensions.Options; using System; using System.IO; namespace Magic.Core; public class ConsoleForamt : ConsoleFormatter, IDisposable { private CustomColorOptions _formatterOptions; private readonly IDisposable _optionsReloadToken; private bool ConsoleColorFormattingEnabled => _formatterOptions.ColorBehavior == LoggerColorBehavior.Enabled || _formatterOptions.ColorBehavior == LoggerColorBehavior.Default && System.Console.IsOutputRedirected == false; private void ReloadLoggerOptions(CustomColorOptions options) => _formatterOptions = options; public ConsoleForamt(IOptionsMonitor options) : base("custom_format") => (_optionsReloadToken, _formatterOptions) = (options.OnChange(ReloadLoggerOptions), options.CurrentValue); public override void Write(in LogEntry logEntry, IExternalScopeProvider scopeProvider, TextWriter textWriter) { string message = logEntry.Formatter?.Invoke(logEntry.State, logEntry.Exception); if (message is null) { return; } ConsoleColor color = ConsoleColor.White; switch (logEntry.LogLevel) { case LogLevel.Information: color = ConsoleColor.Green; break; case LogLevel.Warning: color = ConsoleColor.Yellow; break; case LogLevel.Error: color = ConsoleColor.Red; break; } textWriter.WriteWithColor("【日志级别】:" + logEntry.LogLevel, ConsoleColor.Black, color); textWriter.WriteWithColor("【日志时间】:" + DateTime.Now.ToString("yyyy:MM:dd:HH:mm:ss"), ConsoleColor.Black, color); textWriter.WriteWithColor("【日志内容】:" + message, ConsoleColor.Black, color); if (logEntry.Exception != null) { textWriter.WriteWithColor("【异常信息】:" + logEntry.Exception, ConsoleColor.Black, color); } textWriter.WriteLine(); } public void Dispose() { _optionsReloadToken?.Dispose(); } }