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

Ana*_*yuk 5 c# console logging

我使日志输出如下:

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();
    }
Run Code Online (Sandbox Code Playgroud)

我收到消息:

信息:ConsoleLogging.Program[0]

这是对紧急广播系统的一次测试。

但我想这样:

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

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

MCa*_*tle 2

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

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

我最终根据 ConsoleLogger.cs 的源代码SimpleConsoleLogger创建了自己的类,我可以在其中删除类别和事件 id 部分中的以下行:WriteMessage()

logBuilder.Append(logName);
logBuilder.Append("[");
logBuilder.Append(eventId);
logBuilder.AppendLine("]");
Run Code Online (Sandbox Code Playgroud)

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

logBuilder.Append(_messagePadding);
Run Code Online (Sandbox Code Playgroud)

然后,我必须创建一个SimpleConsoleLoggerProvider基于 的类,在代码中ConsoleLoggerProvider替换我的类,并执行相同的操作以创建,以便我可以将记录器连接到工厂,如下所示:SimpleConsoleLoggerConsoleLoggerExtensionsSimpleConsoleLoggerExtensions

_loggerFactory = new LoggerFactory().AddSimpleConsole();
Run Code Online (Sandbox Code Playgroud)

这不是最简单的解决方案,因此类名有点用词不当,但它确实有效。

实际解决方案代码