【问题标题】:How to format the output of logs in the console?(Microsoft.Extensions.Logging)如何格式化控制台中的日志输出?(Microsoft.Extensions.Logging)
【发布时间】:2017-07-10 15:11:24
【问题描述】:

我这样输出日志:

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 库。

【问题讨论】:

    标签: c# logging console


    【解决方案1】:

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

    我首先创建了一个名为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);
    

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

    _loggerFactory = new LoggerFactory().AddSimpleConsole();
    

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

    【讨论】:

      猜你喜欢
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2013-11-19
      • 2010-11-29
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      相关资源
      最近更新 更多