我有一个Web应用程序,在启动时将服务器本地时区存储在全局静态成员中,然后将JVM的DefaultTimeZone设置为GMT。
在启动期间,log4j以服务器默认时区记录消息。
现在,当我在log4j.properties中更改日志级别时,日志级别会动态更改,现在log4j会以GMT时间记录消息。
我的要求是始终在服务器本地时区记录消息。
我如何在我的场景中实现这一目标?任何指针都会非常感激。
谢谢
答案 0 :(得分:3)
现在,当我在log4j.properties中更改日志级别时,日志级别会动态更改
这意味着您已将log4j配置为监视配置文件中的更改,配置为not recommended for webapps(另请参阅this related SO question)。
发生的是这样的事情
TimeZone.getDefault()
返回机器的时区我在这里建议一些选择:
TimeZone getMyAppDefaultTimeZone()
这样的东西。 仅针对应用程序代码所需的内容更改JVM范围的默认值会产生更大的意外后果。
答案 1 :(得分:0)
获取您正在使用的log4j版本的源代码,并调查您正在使用的Appender,以查找生成的时间戳的位置。然后找出你需要在该位置实际完成的代码,然后更新你的问题。
答案 2 :(得分:0)
如果您使用的是 log4cxx 0.9.7 ,则默认时区将为GMT。获取服务器的时区并在配置中添加以下行以在HK时区打印日志(GMT + 8:00)
log4j.appender.R.layout.TimeZone=GMT-8:00