2017-02-16 92 views
2

我需要錯誤數據保存到數據庫後打印錯誤數據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'? (請在問題*中顯示*如何期望在nlog配置中使用此擴展,以及在從代碼登錄時如何使用它) – Richard

回答

1

您可以用LogEventInfo屬性發送。該easierst方式是使用流暢的界面using NLog.Fluent;

記錄:

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()。Property(「prop1 「,錯誤).Write();因爲logger.Error() - void函數。 –

+1

使用'使用NLog.Fluent;' NLog 3.2+ – Julian