如何使用 Serilog 根据日志级别将日志写入 STDERR

Tha*_*yen 6 settings logging stdout stderr serilog

我正在将 Serilog 用于我的 .netcore 应用程序并将日志写入控制台。所有日志都到达 STDOUT 流,但要求是 Error 和 Fatal 级别应该到达 STDERR 流。我已经添加"standardErrorFromLevel": "Error"到 appsetting.json 中 Writeto Console 设置的 arg 但不起作用,并且我的 STDERR 仍然为空。如何将错误和致命级别的日志重定向到 STDERR?请帮忙!!!

R. *_*urs 1

我试图实现与您相同的目标,并且我让它与 VS.Net 2020 和 Serilog 一起使用。

我的appSettings.json看起来像这样:

{
  "Serilog": {
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "standardErrorFromLevel": "Error"
        }
      }
    ],
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试将 Web 项目属性、调试、常规、启动配置文件中的命令行参数设置为: >c:\temp\stdout.log 2>c:\temp\stderr.log。并且日志记录很好地分为这两个文件。

我的 .Net6 program.cs 包含 SeriLog 的以下内容:

builder.Host.UseSerilog((context, configuration) => configuration
    .Enrich.FromLogContext()
    .ReadFrom.Configuration(context.Configuration)
    })
);
Run Code Online (Sandbox Code Playgroud)

为了使 SeriLog 成为控制器中依赖注入的默认值ILogger<T>,我添加了:

builder.Services.AddLogging(x =>
{
    x.ClearProviders();
    x.AddSerilog(dispose: true);
});
Run Code Online (Sandbox Code Playgroud)

也许您正在使用 DI 而实际上根本没有使用 SeriLog?

如果您想尝试在代码中设置属性,只需添加

    .WriteTo.Async(x =>
    {
         x.Console(standardErrorFromLevel: LogEventLevel.Error);
    }
Run Code Online (Sandbox Code Playgroud)

里面UseSerilog()

我必须安装以下 SeriLog 软件包:

  • Serilog.AspNetCore 4.1.0
  • Serilog.Extensions.Logging 3.1.0
  • SeriLog.设置.配置3.3.0
  • SeriLog.Extensions.Logging.File 2.0.0

后者不应该在那里相关。