NLog中的扩展属性

时间:2016-10-21 08:21:49

标签: asp.net-core asp.net-core-mvc .net-core nlog asp.net-core-webapi

配置文件中提到的布局如下:

Timestamp: ${date}${newline}Title: ${event-properties:item=Title}${newline}Message: ${message}${newline}Machine: ${machinename}${newline}${newline}${LayoutFooter}

例外情况,我想在此布局中再添加两个属性,其中包括Stack TraceInner Exception Message

我通过将布局模式修改为:

来实现上述要求
Timestamp: ${date}${newline}Title: ${event-properties:item=Title}${newline}Message: ${message}${newline}${event-properties:item=StackTrace}${event-properties:item=InnerException}Machine: ${machinename}${newline}${newline}${LayoutFooter}

然后通过代码,

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);
    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);
}

通过以上方法,如果我需要添加更多扩展属性,我需要更改配置文件和代码。

如果是单个配置文件,这种方法很好,但是在多个配置文件的情况下,这很费时。

有什么方法可以通过更改代码来添加扩展属性,而不会更改配置文件。

当我使用Microsoft Enterprise Logging库时,我能够实现此功能,因为它在ExtendedProperties LogEntry类中具有Microsoft.Practices.EnterpriseLibrary.Logging属性。

1 个答案:

答案 0 :(得分:1)

  

有什么方法可以通过更改代码来添加扩展属性,而不会更改配置文件。

有一个${all-event-properties} renderer,它有多个参数如何渲染。