4

こんにちは、を使用していくつかのメッセージをファイルに記録し、他のメッセージを別のファイルに記録しようとしていますSerilog

次の構成を試しました。

Log.Logger = new LoggerConfiguration()
                    .WriteTo.Map("type", "audit", (name, x) => x.File(auditLogPath))
                    .WriteTo.Map("type", "normal", (nm, wt) => wt.File(logpath).WriteTo.Console())
                    .CreateLogger();

今、私Pushはキーと値のペアがauditログコンテキストにあるとき、私のデータが最初のパターンでログに記録されることを期待していますaudit:

using(LogContext.PushProperty("type","audit")
{
    Log.Information("something");
} 

データが 2 番目のパターンになるのはなぜですか? コンソールにログが記録され、他のファイルに入れられますが、理由がわかりません。

アップデート

以下の回答から、複数のロガーを定義する必要はないことを理解しましたが、に基づいてディスパッチしますkey

Log.Logger = new LoggerConfiguration()
                  .WriteTo.Map("type", string.Empty, (nm, wt) => {
                      if (nm == "audit") {
                        wt.File(auditLogPath);  //i want to write here !
                        return;
                      }
                      wt.File(logpath).WriteTo.Console()                                                                                
                   })
             .CreateLogger();

ただし、以下のような最初のシナリオでログインするために使用しようとするとaudit、すべてのログが他のシナリオに配置されます ( logpath+ Console)

using(LogContext.PushProperty("type","audit"))
{
    Log.Information("something");
}
4

1 に答える 1