2017-02-16 32 views
2

エラーデータをdbに保存した後、エラーデータをNLogファイルに出力する必要があります。カスタムレイアウトレンダラーを書きたいと思います。カスタムレイアウトレンダラーにカスタムオブジェクトを送信するNLog ASP.NETコア

[LayoutRenderer("error-data")] 
public class ErrorDataLayoutRenderer : AspNetLayoutRendererBase 
{ 
    protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent) 
    { 
     builder.Append($"{error.Id} | {error.LoggedDate} | {error.Url}"); 
    } 
} 

私はnlog.configに書きたい:

<target xsi:type="File" name="errors" fileName="c:\log.errors.txt" 
      layout=${error-data}" /> 

とサービスで:

var error = service.LogError(data); 
Logger Logger = LogManager.GetCurrentClassLogger(); 
Logger.Error(error); //or something like that 

error - DB内のエンティティを表すクラス。それはいくつかのプロパティ:Id, LoggedDate, Summaryなど errorここでオブジェクトを得ることができますか?

+0

'ERROR'何ですか?easierst方法は、流れるようなインターフェイスusing NLog.Fluent;

ログを使用することですか(nlogの設定でこの拡張機能をどのように使用するのか、そしてコードからログを記録するときにこの拡張機能をどのように使用するのか質問に*表示してください) – Richard

答えて

1

LogEventInfoプロパティで送信できます。あなたのターゲットで

var logger = LogManager.GetCurrentClassLogger(); 
var error = ..; 
logger.Error().Property("prop1", error).Write(); //don't forget .Write()! 

protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent) 
{ 
    var error = logEvent.Properties["prop1"]; //read the property 
    builder.Append($"{error.Id} | {error.LoggedDate} | {error.Url}"); 
} 
+0

プロパティlogger.Error()を設定できません。 "、エラー).Write(); logger.Error() - void関数のためです。 –

+1

'NLog.Fluent;を使用する ' NLog 3.2+ – Julian

関連する問題