有条件地单独禁用 Serilog 接收器

Ali*_*liK 6 c# serilog .net-core

我的 .net core 应用程序基本配置上有 Serilog,如下所示:-

Log.Logger = new LoggerConfiguration()
        .ReadFrom.Configuration(Configuration)
        .Enrich.FromLogContext()
        .WriteTo.File(@"./logs/log-.log", rollingInterval: RollingInterval.Day, outputTemplate: LOG_TEMPLATE)
        .WriteTo.Console(outputTemplate: LOG_TEMPLATE, theme: AnsiConsoleTheme.Literate)
        .WriteTo.SomeOtherLog()
        .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

现在假设我希望根据条件写入 SomeOtherLog。人们会怎样做呢?

就像是

if(conditon)
.WriteTo.SomeOtherLog()
Run Code Online (Sandbox Code Playgroud)

Cai*_*ete 11

Serilog 2.9.0开始,您现在可以使用.WriteTo.Conditional并指定定义是否写入接收器的条件。

Log.Information("Hello");
Log.CloseAndFlush();

var configuration = new LoggerConfiguration()
    .ReadFrom.Configuration(Configuration)
    .Enrich.FromLogContext()
    .WriteTo.File(@"./logs/log-.log", rollingInterval: RollingInterval.Day,
        outputTemplate: LOG_TEMPLATE)
    .WriteTo.Console(outputTemplate: LOG_TEMPLATE, theme: AnsiConsoleTheme.Literate)
    .WriteTo.Conditional(evt => condition, wt => wt.SomeOtherLog());

Log.Logger = configuration.CreateLogger();
// ...
Run Code Online (Sandbox Code Playgroud)

  • @George2.0希望我对运行时条件变化也有同样的问题。我测试了运行时条件的变化,并且“.WriteTo”被切换。 (2认同)

Nic*_*rdt 4

var configuration = new LoggerConfiguration()
        .ReadFrom.Configuration(Configuration)
        .Enrich.FromLogContext()
        .WriteTo.File(@"./logs/log-.log", rollingInterval: RollingInterval.Day,
                      outputTemplate: LOG_TEMPLATE)
        .WriteTo.Console(outputTemplate: LOG_TEMPLATE, theme: AnsiConsoleTheme.Literate);

if (condition)
{
    configuration.WriteTo.SomeOtherLog();
}

Log.Logger = configuration.CreateLogger();
Run Code Online (Sandbox Code Playgroud)