2017-11-08 10 views
2

私は少しのサンプルプロジェクトでserilogを実装しようとしています。 I'veがやった、これまでに以下:SourceContextによるSerilogロガー設定

  • を新しいASP.NETコアWebアプリケーションを作成します(MVC)
  • インストール・パッケージSerilog.AspNetCore
  • インストール・パッケージSerilog.Sinks.File
  • インストール-package Serilog.Formatting.Compact
  • フォローthisブログ投稿
  • thisブログ投稿
に従うことをお試しください

私の質問:

カテゴリ名(私の場合「MyLogger」)に基づいて2つの異なるロガーを設定する可能性はありますか?私はこのロガーに、私のデフォルトロガーとは異なるファイルを使用させたい。私の幸せな世界、ファンタジーでは、次のようになります。

 Log.Logger = new LoggerConfiguration() 
      .MinimumLevel.Debug() 
      .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) 
      .Enrich.FromLogContext() 
      .WriteTo.File(new CompactJsonFormatter(), @"C:\temp\standardLog.txt") 
      .WriteTo.File(new CompactJsonFormatter(), @"C:\temp\specialLog.txt").Filter.ByIncludingOnly(x => x.SourceContext("MySpecialLogger") 
      .CreateLogger(); 

そして、私は新しいロガーを作成する場合var logger = _loggerFactory.CreateLogger("MySpecialLogger");ログは私のspecialLog.txtファイルにリコールセーフされます。

アイデア?

答えて

1

この場合、Serilog.Sinks.Mapが必要です。

dotnet add <PROJECT> package Serilog.Sinks.Map -v 1.0.0-dev-00012 
その後

:すべての

Log.Logger = new LoggerConfiguration() 
     .MinimumLevel.Debug() 
     .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) 
     .Enrich.FromLogContext() 
     .WriteTo.Map("SourceContext", null, (sc, wt) => 
      wt.File(new CompactJsonFormatter(), sc == "MySpecialLogger" ? 
       @"C:\temp\specialLog.txt" : 
       @"C:\temp\standardLog.txt")) 
     .CreateLogger(); 
+0

まず:私の質問のための時間を持ってくれてありがとう!あなたの答えについて:条件演算子は失敗します(コンパイラエラーのみの割り当て、call(...)は文として使用できます)。このパラメータは無効です: 'Action configure =(x、wt) => x == ""? wt.File( ""):wt.File( "") '; - しかし私は本当にマップアプローチが好きです。他のアイデア? – Joshit

+0

固定 - ラムダが 'アクション'だったのを忘れてしまった - ありがとう –

+0

素晴らしい! RollingFile-Sinkを使用していると、私が望むすべてのものがあります:)ありがとうございました!!!しかし、予期しない動作がまだあります.MySpecialLoggerは期待通りに動作します。しかし、File-Sinkを使用すると、私のStandardLoggerは「Starting Web Host」だけを出力します。 RollingFileを使用すると、001-logにメッセージが格納され、もう1つに起動メッセージが含まれる2つのログファイル(標準 - {date} .txtと標準 - {date} _001.txt)が取得されます。 'Log.Information(" Webホストの起動 ")' -Callを削除すると、すべてが正常に動作します... – Joshit

関連する問題