2017-01-31 13 views
0

.netコアのログメッセージにはNLogを使用しています。.netコアのnlogに特定のデータとプロパティを記録する方法

以下は、私のためのロギングジョブを実行する方法です。 プロパティもログできます。 そして、私はこのメソッドを呼び出すときだけ、ファイルに書き込みます。私は、.NETコアにNLogを追加することにより、同様の機能を実現したい

"Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext." 

"Request starting HTTP/1.1 GET http://localhost:5000/api/" 

private static void WriteLog(LogEvent logEvent) 
    { 
     var log = LogManager.GetLogger(logEvent.Logger); 

     LogEventInfo logMsg = new LogEventInfo(); 
     logMsg.Message = logEvent.Message; 
     logMsg.Level = logEvent.LogLevel; 
     logMsg.Properties.Add("Title", logEvent.Title); 
     logMsg.Properties.Add("Name", "abc"); 
     if (!string.IsNullOrEmpty(logEvent.StackTrace)) 
     { 
      logMsg.Properties.Add("StackTrace", "Stack Trace: " + logEvent.StackTrace + Environment.NewLine); 
     } 
     if (!string.IsNullOrEmpty(logEvent.InnerException)) 
     { 
      logMsg.Properties.Add("InnerException", "Inner Exception: " + logEvent.InnerException + Environment.NewLine); 
     } 
     log.Log(logMsg); 
    } 

のようなメッセージをログに記録されていません。 次のように私はStartUp.csにNLogを追加しました:

loggerFactory.AddNLog(); 

をしかし、上記のようにNLogを追加することによって、それがアクションの実行に関連するすべてのメッセージをログに記録します。しかし、私はこれらのメッセージを望んでいません。

NLogにLogInformation()を使用してメッセージを記録させます。さらに'StackTrace''InnerException'のようなプロパティをここに渡す方法

_logger.LogInformation("Home controller and Index action - logged"); 

答えて

1

自動的に記録される内容を制限するために、あなたはnlog.configにしてStartup.csに設定されているログレベルを見てみたいことがあります。たとえば、「情報」以上(警告、エラー、致命的)のメッセージは自動的に記録しますが、トレースやデバッグは記録しません。また、名前空間 "MyNamespace"のクラスのメッセージのみを記録します。

<rules> 
    <!-- Level can be: Trace, Debug, Info, Warn, Error, Fatal --> 
    <logger name="MyNamespace.*" minlevel="Info" writeTo="DBLogger" final="true" /> 
</rules> 

例外とスタックトレースを保存するには、あなたの代わりに_logger.Log()メソッドを使用する必要があります。

try { ... } 
catch(Exception ex) { 
    _logger.Log(LogLevel.Error, "Message", ex); 
} 

スタックトレースは例外でログインするために利用できるようになります。

how to parameterize the log messagesの追加情報があります。

関連する問題