36

WriteTo.RollingFileSerilog を次のように使用して、1 日に 1 つのファイルを書き込もうとしています。

var log = new LoggerConfiguration().WriteTo.RollingFile(
                    @"F:\logs\log-{Date}.txt",
                    LogEventLevel.Debug).CreateLogger();
            log.Information("this is a log test");

しかし、同じ日にログ エントリごとに新しいログ ファイルを取得しています。

1 日に 1 つのログ ファイルを持つように、毎日新しいファイルに書き込むように Serilog を構成するにはどうすればよいですか?


また、7 日以上経過したファイルを削除するアーカイブ プロセスはありますか?

4

8 に答える 8

52

以下を試してください:

 var log = new LoggerConfiguration()
          .MinimumLevel.Debug()
          .WriteTo.File(@"f:\log\log.txt", rollingInterval: RollingInterval.Day) 
          .CreateLogger();

ログ ファイル名は、自動的に log-20150819.txt などになります。日付を指定する必要はありません。古いファイルは、retainedFileCountLimit に従ってクリーンアップされます - デフォルトは 31 です。

于 2015-08-20T01:55:01.720 に答える
3

マルチプロセス共有ログ ファイルを有効にするには、shared を true に設定します。

コードで

.WriteTo.RollingFile("log-{Date}.txt", shared: true)

またはweb.configで

<add key="serilog:write-to:RollingFile.shared" value="true" />
于 2019-02-05T15:08:36.513 に答える
-1

これが私がやった方法です:

private readonly Serilog.ILogger _logger; //= Log.ForContext( "Name", "Weather" );

public WeatherForecastController() {
  string subPath = Path.Combine( DateTime.Now.ToString( "yyyy" ), DateTime.Now.ToString( "MM" ) ) + $"/{DateTime.Now.ToString("dd")}_Weather";
  _logger = Log.ForContext( "Name", subPath );
}

  .UseSerilog( ( hostingContext, loggerConfiguration ) => loggerConfiguration
    .ReadFrom.Configuration( hostingContext.Configuration )
    .Enrich.FromLogContext()
    .WriteTo.Console()
    .WriteTo.Map(
      "Name",
      "Request",
      ( name, wt ) => {
        if (name == "Request")
          wt.RollingFile( Path.Combine( $"{hostingContext.Configuration["LogPath"]}/{{Date}}-{name}.txt" ) );
        else
          wt.File( $"{hostingContext.Configuration["LogPath"]}/{name}.txt" );
      } )
  );   
于 2020-05-15T03:16:44.267 に答える