2

I have serilog on my .net core app basic config as follows:-

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

Lets now say I wish to write to SomeOtherLog based on a condition. How would one go about that?

Something like

if(conditon)
.WriteTo.SomeOtherLog()
AliK
  • 811
  • 2
  • 7
  • 26

2 Answers2

4

As of Serilog 2.9.0 you can now use .WriteTo.Conditional and specify the condition that defines if the sink will be written to or not.

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();
// ...
C. Augusto Proiete
  • 20,243
  • 2
  • 51
  • 71
  • Augusto .. is `evt => condition` evaluated only at 'creation'?.. or if the condition changes at runtime, that '.WriteTo.' will be toggled on/off? I was searching for documentation to `.WriteTo.Conditional(...)` but could not find any; could you amend the answer above to show a working `evt => condition, wt => wt.SomeOtherLog()` – George 2.0 Hope Feb 22 '22 at 20:53
2
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();
Nicholas Blumhardt
  • 28,098
  • 4
  • 83
  • 98