【问题标题】:Trouble converting Serilog Configuration to appsettings.json将 Serilog 配置转换为 appsettings.json 时遇到问题
【发布时间】:2020-11-03 14:09:02
【问题描述】:

我在 c# 上有这段代码,它做得很好。 来自 CSPConsumersLayer 的每个日志都记录在特定文件 (ConsumerLog.txt) 上,同时,所有其他日志都记录在另一个文件 (Log.txt) 上。 这是我想在 appsettings.json 中实现的 C# 配置

Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(Matching.FromSource(nameof(CSPConsumersLayer))).WriteTo.File(@"..\Logs\ConsumerLog.txt", LogEventLevel.Information, "{Timestamp:G} [{Level}] {ThreadId} {MachineName} {Message} {Exception}{NewLine}", rollOnFileSizeLimit: true, fileSizeLimitBytes: 104857600))
.WriteTo.Logger(lg => lg.Filter.ByExcluding(Matching.FromSource(nameof(CSPConsumersLayer))).WriteTo.File(@"..\Logs\Log.txt", LogEventLevel.Information, "{Timestamp:G} [{Level}] {User} {IP} {ThreadId} {MachineName} {SourceContext} {RequestId} {Message} {Exception}{NewLine}", rollOnFileSizeLimit: true, fileSizeLimitBytes: 104857600))
.CreateLogger();

当我尝试在 Json 上转换它时它不起作用

--这是我自己弄出来的JSON,不能正常工作。

"Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filter": [
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "StartsWith(SourceContext, 'CSPConsumersLayer')"
                }
              }
            ],
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  "path": "../Logs/ConsumerLog.log",
                  "outputTemplate": "{Timestamp:G} [{Level}] {User} {IP} {ThreadId} {MachineName} {SourceContext} {RequestId} {Message} {Exception}{NewLine}",
                  "rollOnFileSizeLimit": "true",
                  "fileSizeLimitBytes": 104857600
                }
              }
            ]
          }
        }
      },
      {
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filter": [
              {
                "Name": "ByExcluding",
                "Args": {
                  "expression": "StartsWith(SourceContext, 'CSPConsumersLayer')"
                }
              }
            ],
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  "path": "../Logs/Log.log",
                  "outputTemplate": "{Timestamp:G} [{Level}] {User} {IP} {ThreadId} {MachineName} {SourceContext} {RequestId} {Message} {Exception}{NewLine}",
                  "rollOnFileSizeLimit": "true",
                  "fileSizeLimitBytes": 104857600
                }
              }
            ]
          }
        }
      }
    ],
    "Enrich": [
      "FromLogContext",
      "WithMachineName"
    ]
  }

【问题讨论】:

  • 您能否详细描述一下“它不能正常工作”。如果过滤不适合您,也可以尝试使用 `"expression": "FromSource(CSPConsumersLayer)"。
  • 感谢您的回复。问题是我没有包含“serilog-extensions-logging”数据包,所以它无法理解过滤器表达式。无论如何,最适合我需要的表达式是“Contains(SourceContext, 'CSPConsumersLayer')”。
  • ...听起来你需要自己回答;)

标签: logging configuration serilog


【解决方案1】:

答案就是这么简单。如果您想对 appsettings.json 进行 过滤,您应该包含一个名为 'serilog-extensions-logging'

【讨论】:

  • 很高兴看到良好的行为,例如从一开始就与评论者互动 - 这不是给定的,所以当你这样做时想要进一步推动和投票是很自然的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2014-02-28
  • 2022-01-25
  • 1970-01-01
  • 2018-01-08
  • 2018-11-23
  • 2013-10-14
相关资源
最近更新 更多