我这样输出日志:

static void Main(string[] args)
    {
        ILoggerFactory loggerFactory = new LoggerFactory()
                                             .AddConsole();

        ILogger logger = loggerFactory.CreateLogger<Program>();

        logger.LogInformation(
          "This is a test of the emergency broadcast system.");

        Console.WriteLine("Press any key...");
        Console.Read();
    }


我收到消息:


  信息:ConsoleLogging.Program [0]
  
  这是对紧急广播系统的测试。


但我想这样:


  info:这是对紧急广播系统的测试。


如何在控制台中格式化日志的输出?
我使用Microsoft.Extensions.Logging,Microsoft.Extensions.Logging.Console库。

最佳答案

我正在尝试做同样的事情。

我首先创建了一个名为SimpleConsoleLogger的类,该类继承自ConsoleLogger,以便可以覆盖WriteMessage()方法,但是原始方法中的代码依赖于某些私有内部结构和字段,因此我不想从头开始编写整个方法。

我最终创建了自己的SimpleConsoleLoggerbased off the source code for ConsoleLogger.cs,在其中可以删除类别和事件ID部分中WriteMessage()中的以下行:

logBuilder.Append(logName);
logBuilder.Append("[");
logBuilder.Append(eventId);
logBuilder.AppendLine("]");


...以及消息部分的以下行:

logBuilder.Append(_messagePadding);


然后,我不得不基于SimpleConsoleLoggerProvider创建一个ConsoleLoggerProvider类,在其中用代码替换了我的SimpleConsoleLogger类,并对ConsoleLoggerExtensions进行了相同的操作以创建SimpleConsoleLoggerExtensions,这样我就可以连接记录器进入工厂如下:

_loggerFactory = new LoggerFactory().AddSimpleConsole();


这不是最简单的解决方案,因此类名有点用词不当,但是可以使用。

c# - 如何在控制台中格式化日志的输出?(Microsoft.Extensions.Logging)-LMLPHP

10-04 12:07