Datetime 使用Log4Net设置日期时间格式

Datetime 使用Log4Net设置日期时间格式,datetime,log4net,datetime-format,log4net-configuration,Datetime,Log4net,Datetime Format,Log4net Configuration,我想在使用Log4Net编写的日志文件中显示时间戳(HH:mm:ss)。我希望此值位于中心时间,但不希望出现偏移。理想情况下,我希望它读成CT。现在,我的配置是这样设置的:%date{HH:mm:sszzz},它产生了这个-05:00。生成此时间戳格式的正确格式说明符是什么?正如stuartd所说,您无法使用时区对DateTime进行本机格式化。但是,您可以创建一个自定义的PatternLayoutConverter,它将使用Convert方法中需要的任何渲染。以下是DatePatternCon

我想在使用Log4Net编写的日志文件中显示时间戳(HH:mm:ss)。我希望此值位于中心时间,但不希望出现偏移。理想情况下,我希望它读成
CT
。现在,我的配置是这样设置的:
%date{HH:mm:sszzz}
,它产生了这个
-05:00
。生成此时间戳格式的正确格式说明符是什么?

正如stuartd所说,您无法使用时区对DateTime进行本机格式化。但是,您可以创建一个自定义的
PatternLayoutConverter
,它将使用
Convert
方法中需要的任何渲染。以下是
DatePatternConverter
的转换方法供参考:

// 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
接口传递这些选项

拥有转换器后,通过在布局标记中声明将其添加到布局中

<layout ...>
    <converter>
        <name value="myDateWithTimeZone" />
        <type value="MyApp.LogConverters.MyConverter" />
    </converter>
    <!-- rest of the layout -->
</layout>


.Net日期时间格式字符串不支持时区名称。@Dan,您是否成功处理日志中的日期格式设置?我还没有机会尝试此操作。我很抱歉…我知道我需要接受你的回答或评论,并说明为什么这是不可接受的-我只是没有时间。不过,我没有忘记,我感谢你花时间回答我的问题。我保证尽快跟进结果!仍然没有抓住机会来测试这个问题,但是为了完整性接受了这个答案。