Serilog - RollingFile Sink を使用していますが、すべてのデータを 1 つのファイルに 1 日保存します。私のアプリケーションでは、1 日で 1 GB のログが書き込まれます。だから私は日付とサイズに基づいてログファイルをロールバックしたい.
日付とサイズに基づいてファイルをローリングするように RollingFile Sink を構成するにはどうすればよいですか?
Serilog - RollingFile Sink を使用していますが、すべてのデータを 1 つのファイルに 1 日保存します。私のアプリケーションでは、1 日で 1 GB のログが書き込まれます。だから私は日付とサイズに基づいてログファイルをロールバックしたい.
日付とサイズに基づいてファイルをローリングするように RollingFile Sink を構成するにはどうすればよいですか?
ドキュメントから:
ディスクの使用量が暴走してアプリがダウンするのを避けるために、ローリング ファイル シンクはデフォルトでファイル サイズを 1GB に制限します。この制限は、fileSizeLimitBytes パラメーターを使用して変更または削除できます。
.WriteTo.RollingFile("log-{Date}.txt", fileSizeLimitBytes: null)
この例では、制限を に設定して削除していnull
ます。あなたの場合は、適切なサイズに設定してください。
アップデート
はい、あなたのコメントに基づいてソース コードを調べたところ、RollingFileSink の最小の測定単位は 1 日であるように見えるため、同じ日に複数のファイルを保持することはサポートされていないようです。ただし、よく見ていませんでしたが、 RollingFileSink.csOpenFile
のメソッドはシーケンス番号で何かを行っているようです。そのコードが何をしているかを見てみたいと思うかもしれません。
RollingFile シンクのこの代替実装を探していると思います。
Serilog ローリング ファイル シンク (代替)
これは、ファイル サイズに基づいてロール オーバー動作を指定できるローリング ファイル シンクです。 https://github.com/BedeGaming/sinks-rollingfile
これが私の解決策です
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" );
} )
);