我想在使用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>

07-28 02:54
查看更多