我试图在企业记录器库文本格式化程序中找到填充字段的方法。
我的日志文件条目的当前格式如下:
02/01/2015 15:36:43.946|Information|Test Information Message 02/01/2015 15:36:43.946|Error|Test Error Message
然而,为了便于阅读像记事本这样的基于文本的观看者,我希望它们的格式如下:
02/01/2015 15:36:43.946|Information|Test Information Message 02/01/2015 15:36:43.946|Error |Test Error Message
这是否可以在令牌的配置中实现,或者是否需要自定义格式化程序,如果有的话,有任何好的示例可以为我提供我想要实现的目标的起点。
无论如何还要在日志条目中显示扩展属性集合中的单个值吗?
答案 0 :(得分:1)
有几种方法可以做你想要的。一种方法是自定义格式化程序(如您所述)。另一种选择是创建自定义LogEntry
:
[System.Xml.Serialization.XmlRoot("paddedLogEntry")]
[Serializable]
public class PaddedLogEntry : LogEntry
{
public string PaddedSeverity
{
get
{
return this.Severity.ToString().PadRight(11);
}
}
}
LogWriter logger = new LogWriterFactory().Create();
PaddedLogEntry logEntry1 = new PaddedLogEntry()
{
Message = "Testing 123...",
Severity = System.Diagnostics.TraceEventType.Information
};
logEntry1.Categories.Add("General");
logger.Write(logEntry1);
使用模板字符串:{timestamp}|{property(PaddedSeverity)}|{message}
。
您可以搭载ExtendedProperties:
,而不是创建自定义LogEntryLogEntry logEntry3 = new LogEntry()
{
Message = "Oops!",
Severity = System.Diagnostics.TraceEventType.Error
};
logEntry3.Categories.Add("General");
var extendedProperties = new Dictionary<string, object>();
extendedProperties.Add("PaddedSeverity", logEntry3.Severity.ToString().PadRight(11));
logEntry3.ExtendedProperties = extendedProperties;
logger.Write(logEntry3);
使用模板字符串:{timestamp}|{keyvalue(PaddedSeverity)}|{message}
。
无论如何还要在日志条目中显示扩展属性集合中的单个值吗?
答案是肯定的。在最后一个模板中,我将该方法与{keyvalue(PaddedSeverity)}
令牌一起使用。