あらまし
Serilog
の出力をフォイルに保存する際に、年/月/日.txt
のように保存したくて情報探しまくった結果、やっとこさ見つかったのでそのメモ
方法
いつものSerilog.Sinks.Console
やSerilog.Sinks.File
に加え、Serilog.Sinks.Map
をパッケージ参照として加える
あとは、以下のissue
に書かれた方法で年や月フォルダに振り分けできる。
GenericHostでの実装例
WriteTo
に次いで指定するMap
メソッドの引数にて、
- 引数
keySelector
で日付を作成 - 引数
configure
でkeySelector
で作成した日付を基にフォルダパスを構成
await Host.CreateDefaultBuilder(args)
.ConfigureServices((ctx, services) => {
// snip...
})
.ConfigureLogging((logging) => {
logging.ClearProviders();
var logger =
new LoggerConfiguration()
.WriteTo.Map(
keySelector: logEvent => new DateTime(logEvent.Timestamp.Year, logEvent.Timestamp.Month, logEvent.Timestamp.Day),
configure: (month, writer) => {
writer.File(path: $"./logs/{month:yyyy}/{month:yyyyMM}/log-{month:yyyyMMdd}.txt", rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information);
},
sinkMapCountLimit: 1
)
.WriteTo.Console(restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information)
.CreateLogger()
;
logging.AddSerilog(logger);
})
.RunConsoleAsync()
;