8

Serilog - RollingFile Sink を使用していますが、すべてのデータを 1 つのファイルに 1 日保存します。私のアプリケーションでは、1 日で 1 GB のログが書き込まれます。だから私は日付とサイズに基づいてログファイルをロールバックしたい.

日付とサイズに基づいてファイルをローリングするように RollingFile Sink を構成するにはどうすればよいですか?

4

6 に答える 6

2

ドキュメントから:

ディスクの使用量が暴走してアプリがダウンするのを避けるために、ローリング ファイル シンクはデフォルトでファイル サイズを 1GB に制限します。この制限は、fileSizeLimitBytes パラメーターを使用して変更または削除できます。

.WriteTo.RollingFile("log-{Date}.txt", fileSizeLimitBytes: null)

この例では、制限を に設定して削除していnullます。あなたの場合は、適切なサイズに設定してください。

アップデート

はい、あなたのコメントに基づいてソース コードを調べたところ、RollingFileSink の最小の測定単位は 1 日であるように見えるため、同じ日に複数のファイルを保持することはサポートされていないようです。ただし、よく見ていませんでしたが、 RollingFileSink.csOpenFileのメソッドはシーケンス番号で何かを行っているようです。そのコードが何をしているかを見てみたいと思うかもしれません。

于 2016-10-03T13:11:39.303 に答える
1

RollingFile シンクのこの代替実装を探していると思います。

Serilog ローリング ファイル シンク (代替)

これは、ファイル サイズに基づいてロール オーバー動作を指定できるローリング ファイル シンクです。 https://github.com/BedeGaming/sinks-rollingfile

于 2016-10-10T16:36:24.253 に答える
0

これが私の解決策です

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:10:56.887 に答える