web-dev-qa-db-ja.com

Serilog:別のファイルに記録

LogLevelに関係なく、すべてのタイプのイベントを単一のJsonファイルに記録しています。現在、いくつかのカスタムパフォーマンスカウンターを別のJsonファイルに記録する必要があります。これはどのようにしてSerilogで実行できますか。別のロガーインスタンスを作成して、パフォーマンスカウンターをログに記録する場所で使用する必要がありますか?これをLibLogで使用したい

17
Shetty

これを行うには、まずパフォーマンスカウンターイベントに特定のプロパティ値(LibLogのOpenMappedContext())または特定のタイプ/名前空間のタグが付けられていることを確認します。

var log = LogProvider.For<MyApp.Performance.SomeCounter>()
log.Info(...);

Serilogを設定する場合、フィルターを適用した sub-logger は、必要なイベントのみを2番目のファイルに送信できます。

Log.Logger = new LoggerConfiguration()
    .WriteTo.Logger(lc => lc
        .Filter.ByExcluding(Matching.FromSource("MyApp.Performance"))
        .WriteTo.File("first.json", new JsonFormatter()))
    .WriteTo.Logger(lc => lc
        .Filter.ByIncludingOnly(Matching.FromSource("MyApp.Performance"))
        .WriteTo.File("second.json", new JsonFormatter()))
    .CreateLogger();
11

独立したロギングパイプラインが必要な場合は、別のインスタンスを作成してください。これは奪われて https://github.com/serilog/serilog/wiki/Lifecycle-of-Loggers から改作されます:

using (var performanceCounters = new LoggerConfiguration()
        .WriteTo.File(@"myapp\log.txt")
        .CreateLogger())
{
    performanceCounters.Information("Performance is really good today ;-)");

    // Your app runs, then disposal of `performanceCounters` flushes any buffers
}
1
Stefan Bormann