是否可以在应用程序启动时强制 Serilog.Sink.File 启动一个新的日志文件?

mur*_*ith 5 .net serilog

我正在使用Serilog.Sinks.File并希望在我的应用程序启动时获得一个新的日志文件。

有没有办法做到这一点?

记录器总是附加到现有的日志文件。

小智 0

您可以使用这样的方法:

public static void CreateNextLogInSequence(string path, string prefix, DateTime timestamp, string suffix, string format, int? index = null)
{
    var target = new FileInfo(string.Format("{0}/{1}{2}{3}{4}",
        path,
        prefix,
        timestamp.ToString(format, CultureInfo.InvariantCulture),
        index == null ? string.Empty : ("_" + index.Value.ToString("000", CultureInfo.InvariantCulture)),
        suffix));
    if (target.Exists || index == null)
        CreateNextLogInSequence(path, prefix, timestamp, suffix, format, (index ?? 0) + 1);
    else
        target.Create().Close();
}
Run Code Online (Sandbox Code Playgroud)

..并像这样使用它:

.UseSerilog((context, services, config) =>
{
    ...

    CreateNextLogInSequence("Logs", "log-", DateTime.Now, ".txt", "yyyyMMdd");

    config.WriteTo.Logger(lc => lc
        .WriteTo.File(path: $"Logs/log-.txt", rollOnFileSizeLimit: true, rollingInterval: RollingInterval.Day,
            formatter: new ExpressionTemplate("{@t:yyyy-MM-dd HH:mm:ss} [{@l:u3}] [{SourceContext}] {if @m = '[null]' then '' else @m}\n{@x}")));
}
Run Code Online (Sandbox Code Playgroud)

这将在序列中创建一个全新的文件并模拟 Serilog 能够识别的翻转。它将开始使用新创建的文件。