有条件地单独禁用 Serilog Sinks

Conditionally disable Serilog Sinks individually

我的 .net 核心应用程序基本配置上有 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();

现在假设我希望根据条件写入 SomeOtherLog。怎么办呢?

类似

if(conditon)
.WriteTo.SomeOtherLog()
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();

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();
// ...