我想在使用Log4Net编写的日志文件中显示时间戳(HH:mm:ss)。我希望该值位于“中央时间”,但我不希望出现偏移。理想情况下,我希望它阅读<HH:mm:ss> CT
。现在,我的配置是这样设置的:%date{HH:mm:sszzz}
,它正在生成此<HH:mm:ss>-05:00
。产生此时间戳格式的正确格式说明符是什么?
最佳答案
正如stuartd所说,您不能使用本地时区格式化DateTime。但是,您可以做的是创建一个自定义PatternLayoutConverter
,它将使用Convert
方法中所需的任何呈现方式。供参考的是DatePatternConverter
的Convert方法:
// log4net.Layout.Pattern.DatePatternConverter
protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
{
try
{
this.m_dateFormatter.FormatDate(loggingEvent.TimeStamp, writer);
}
catch (Exception exception)
{
LogLog.Error("DatePatternConverter: Error occurred while converting date.", exception);
}
}
m_dateFormatter
字段由选项初始化,您可以通过实现IOptionHandler
接口(interface)来传递它。拥有转换器后,通过在layout标签中声明它,将其添加到布局中
<layout ...>
<converter>
<name value="myDateWithTimeZone" />
<type value="MyApp.LogConverters.MyConverter" />
</converter>
<!-- rest of the layout -->
</layout>