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

时间:2017-07-10 15:11:24

标签: c# logging console

我按如下方式输出日志:

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();
    }

我收到消息:

  

info:ConsoleLogging.Program [0]

     

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

但我希望如此:

  

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

logBuilder.Append(_messagePadding);

然后,我必须根据SimpleConsoleLoggerProvider创建一个ConsoleLoggerProvider类,我在代码中替换了SimpleConsoleLogger类,并对ConsoleLoggerExtensions执行相同操作,以便创建SimpleConsoleLoggerExtensions,以便我可以按如下方式将记录器连接到工厂:

_loggerFactory = new LoggerFactory().AddSimpleConsole();

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

Solution Code in Action