如何在 serilog 日志文件名中使用 属性 值?

How do I use a property value in serilog log file name?

如果我有以下代码:

.WriteTo.Logger(c =>
    c.Filter.ByIncludingOnly(Matching.WithProperty("tsBatchStarted"))
        .WriteTo.File(
            path: Path.Combine(
                      baseDir,
                      "App_Data",
                      "logs",
                      $"SERCrawlerLog_{tsBatchStarted}.txt")
            , restrictedToMinimumLevel: LogEventLevel.Information
            , outputTemplate: logTextTemplate
            //, rollingInterval: RollingInterval.Day
            , retainedFileCountLimit: 2
            , shared: true
) // end .WriteTo.Logger(c =>

我想在文件名中使用 属性 的 tsBatchStarted 值...

如何使用事件的 属性 值 in serilog 的 日志文件名?

dotnet add package Serilog.Sinks.Map

然后:

    .WriteTo.Logger(c => c
        .Filter.ByIncludingOnly(Matching.WithProperty("tsBatchStarted"))
        .WriteTo.Map(
            "tsBatchStarted",
            "none",
            (tsBatchStarted, wt) => wt.File(
                path: Path.Combine(
                      baseDir,
                      "App_Data",
                      "logs",
                      $"SERCrawlerLog_{tsBatchStarted}.txt"),
                restrictedToMinimumLevel: LogEventLevel.Information,
                outputTemplate: logTextTemplate,
                shared: true
            ),
            sinkMapCountLimit: 2
        )
    ) // end .WriteTo.Logger(c =>

请注意,这不会导致文件滚动,您需要使用基于应用程序的机制来清理旧批次的日志。