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

时间:2015-01-02 15:47:04

标签: c# logging enterprise-library

我试图在企业记录器库文本格式化程序中找到填充字段的方法。

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

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

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

无论如何还要在日志条目中显示扩展属性集合中的单个值吗?

1 个答案:

答案 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:

,而不是创建自定义LogEntry
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}

  

无论如何还要在日志条目中显示扩展属性集合中的单个值吗?

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