2017-02-16 36 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