在企业库记录器中填充严重级别字段

Padding Severity Level Field in Enterprise Library Logger

我正在尝试寻找一种方法来填充企业记录器库文本格式化程序中的字段。

我的日志文件条目的当前格式如下:

02/01/2015 15:36:43.946|信息|测试信息消息
02/01/2015 15:36:43.946|错误|测试错误消息

但是为了便于在记事本等基于文本的查看器中阅读,我希望它们的格式如下:

02/01/2015 15:36:43.946|信息|测试信息消息
02/01/2015 15:36:43.946|错误 |测试错误消息

这是否可以在令牌配置中实现,或者是否需要自定义格式化程序?如果需要,是否有任何好的示例可以为我尝试实现的目标提供一个起点。

还有在日志条目中显示扩展属性集合中的单个值的方法吗?

有几种方法可以满足您的需求。一种方法是自定义格式化程序(如您所述)。另一种选择是创建自定义 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}.

除了创建自定义 LogEntry,您还可以借助 ExtendedProperties:

LogEntry 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}.

Also is there anyway to display a single value from the extended properties collection within a log entry?

答案是肯定的。在最后一个模板中,我将这种方法与 {keyvalue(PaddedSeverity)} 标记一起使用。