Serilog:如何编写一个只有一个级别的文件

Serilog: how to write a file with only one level

提问人:Ikinidae 提问时间:10/27/2023 最后编辑:Tiny WangIkinidae 更新时间:10/27/2023 访问量:86

问:

我被要求在开发中编写日志级别 Information、Warning 和 Error,但每个级别都在一个单独的文件中,因此我只包含信息日志,只包含警告日志,只包含错误日志。information.txtwarning.txtError.txt

这是我目前的实现(它有效)。

在:Program.cs

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
        webBuilder.UseSerilog((webHostBuilderContext, loggerConfiguration) =>
        {
            loggerConfiguration.ReadFrom.Configuration(webHostBuilderContext.Configuration);
        });
    });

在 appsettings 中:

"Serilog": {
  "MinimumLevel": "Information",
  "WriteTo": [
    {
      "Name": "Console"
    },
    {
      "Name": "File",
      "Args": {
        "path": "wwwroot/Logs/log.txt",
        "rollingInterval": "Day",
        "reatinedFileCountLimit": 14,
        "restrictedToMinimumLevel": "Information"
      }
    }
  ]
},

我已经安装了 Serilog.Expressions 包并阅读了文档,我知道我必须使用这样的东西

"Filters": [
  {
    "Name": "ByIncludingOnly",
    "Args": {
      "expression": "@l = 'Information'"
    }
  }
]

但我不明白它应该放在哪里。我试过把它放在里面或中间,但它不起作用,有人可以帮助我吗?ArgsArgsName

我已经在 stackoverflow 上阅读了很多线程,但没有任何效果:(

C# .NET ASP.Net-Core 日志记录 Serilog

评论


答:

1赞 Qiang Fu 10/27/2023 #1

这有效,但不能使用 doc。

using Serilog;
using Serilog.Events;

Log.Logger = new LoggerConfiguration()
    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Information)
        .WriteTo.File(
            path: "information.txt"))

    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error)
        .WriteTo.File(
            path: "error.txt"))
        .CreateLogger();

Log.Information("test Information");
Log.Error("test Error");

---------------使用appsettings.json--------------
安装包进行更新
Serilog.Expressions

  "Serilog": {
    "WriteTo": [
      {
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filter": [
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "@l = 'Information'"
                }
              }
            ],
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  "path": "information.txt"
                }
              }
            ]
          }
        }
      },
      {
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filter": [
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "@l = 'Error'"
                }
              }
            ],
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  "path": "error.txt"
                }
              }
            ]
          }
        }
      }
    ]
  }

测试结果
enter image description here

enter image description here

评论

0赞 Ikinidae 10/27/2023
我需要在应用程序设置中配置,以便我可以为每个环境使用不同的配置
0赞 Qiang Fu 10/27/2023
@Ikinidae我已经更新了答案,你可以试一试。
1赞 Ikinidae 10/27/2023
它终于起作用了!!非常感谢!<3 所以这些是子记录者?
1赞 Qiang Fu 10/27/2023
@Ikinidae 是的,他们是子记录者。