首页 > 解决方案 > 如何使用基于代码的配置在 serilog 中输出紧凑的日志级别

问题描述

使用 serilog 时,基于代码的配置和基于文件的配置似乎在输出上产生不同的日志级别紧凑性。

我在使用代码配置时得到 [2020-05-15T13:09:36 Information],而在使用配置文件配置时得到 [2020-05-15T13:09:37 INF]。

如果有人能告诉我如何使用基于代码的配置获取“INF”而不是“INFORMATION”,我将不胜感激。

代码配置:


   return new LoggerConfiguration()
                .Enrich.FromLogContext()
                .WriteTo.Console(LogEventLevel.Verbose,
                    outputTemplate:
                    "[{Timestamp:s} {Level:Level:w3}] {Component} {PollCount} {RequestId} {Message:lj}{NewLine}")
                .WriteTo.File(
                    $"{Path.GetTempPath()}\\Logs\\agent.log",
                    rollingInterval: RollingInterval.Day,
                    restrictedToMinimumLevel: LogEventLevel.Verbose, 
                    outputTemplate: "[{Timestamp:s} {Level:Level:w3}] {Component} {PollCount} {RequestId} {Message:lj}{NewLine}"
                    )

                .CreateLogger()
                .ForContext<T>();

appsettings.json 配置:


  "WriteTo": [
      {
        "Name": "Async",
        "Args": {
          "configure": [
            {
              "Name": "Console",
              "Args": {
                "outputTemplate": "[{Timestamp:s} {Level:Level:u3}] {Component} {PollCount} {RequestId} {Message:lj}{NewLine}"
              }
            },

标签: c#serilog

解决方案


默认情况下,全名用于记录事件。使用输出模板覆盖。Level 的有效值是 u(大写)或 w(小写)和一些字符。级别名称缩写,信息缩写为“INF”。我认为由于无效值,它正在显示默认文本

所以 Level:u3 会输出 INF

级别:w3 将输出 inf

serilog 的官方链接,此处提供级别信息


推荐阅读