web-dev-qa-db-ja.com

Serilog RollingFile

次のように、SerilogでWriteTo.RollingFileを使用しようとしています。

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

私の理解では、ログファイルは日付に基づいて作成され、名前が付けられ、毎日新しいファイルに書き込まれますが、同じ日に各ログエントリの新しいログファイルを取得しています。毎日新しいファイルに書き込むようにSerilogを構成するには、理想的には1日に1つのログファイルを作成する方法を教えてください。

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

12
TechNerd

以下をお試しください:

 var log = new LoggerConfiguration()
          .MinimumLevel.Debug()
          .WriteTo.RollingFile(@"f:\log\log.txt", retainedFileCountLimit:7) 
          .CreateLogger();

ログファイル名は自動的にlog-20150819.txtなどになります。日付を指定する必要はありません。

22

今2018年、標準Serilog.Sinks.File NuGetパッケージはローリングをサポートしています:

.WriteTo.File(@"e:\logs\skilliam.log", rollingInterval: RollingInterval.Day,
    rollOnFileSizeLimit: true, fileSizeLimitBytes: 123456);
8

これのフォローアップとして、グローバルスコープの「ログ」インスタンスを使用していることを確認してください。

例:

Log.Information("Hello world");
2
Matt

同じファイルを使用するには、shared: trueを追加する必要があります

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

1
Diego

これは、asp.net MVC 4/5アプリのweb.configでSerilogを使用する方法です。

Web.configに以下を追加します。

<add key="serilog:minimum-level" value="Information" />
<add key="serilog:minimum-level:override:Microsoft" value="Information" />
<add key="serilog:minimum-level:override:System" value="Information" />
<add key="serilog:using:RollingFile" value="Serilog.Sinks.RollingFile" />
<add key="serilog:write-to:RollingFile.pathFormat" value="./Logs/log-{Date}.txt" />
<add key="serilog:write-to:RollingFile.outputTemplate" value="{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] {Message}{NewLine}{Exception}" />
<add key="serilog:write-to:RollingFile.retainedFileCountLimit" value="10" />

次にApplication_Start of global.asax以下を追加します。

// Get application base directory
string basedir = AppDomain.CurrentDomain.BaseDirectory;

// Setup Serilog for logging
Log.Logger = new LoggerConfiguration()
            .ReadFrom.AppSettings()
            .WriteTo.RollingFile(basedir + "/Logs/log-{Date}.txt")
            .CreateLogger();
1
codecypher

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

コードで

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

またはweb.config

<add key="serilog:write-to:RollingFile.shared" value="true" />
0
Stefan Varga