配置文件中提到的布局如下:
Timestamp: ${date}${newline}Title: ${event-properties:item=Title}${newline}Message: ${message}${newline}Machine: ${machinename}${newline}${newline}${LayoutFooter}
例外情况,我想在此布局中再添加两个属性,其中包括Stack Trace
和Inner 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
属性。