gpt4 book ai didi

java - log4j 时区问题

转载 作者:行者123 更新时间:2023-11-30 05:11:31 26 4
gpt4 key购买 nike

我有一个 Web 应用程序,启动时将服务器本地时区存储在全局静态成员中,然后将 JVM 的 DefaultTimeZone 设置为 GMT。

在启动期间,log4j 正在服务器默认时区中记录消息。

现在,当我更改 log4j.properties 中的日志级别时,日志级别会动态更改,现在 log4j 以 GMT 时间记录消息。

我的要求是始终在服务器本地时区记录消息。

如何在我的场景中实现这一目标?任何指示将不胜感激。

谢谢

最佳答案

Now when i change my log level in log4j.properties the log level is changed dynamically

这意味着您已配置 log4j 来监视配置文件的更改,该配置为 not recommended for webapps (另请参阅this related SO question)。

发生的事情是这样的

  1. 您的应用启动,log4j 初始化,TimeZone.getDefault() 返回计算机的时区
  2. 您更改 JVM 范围内的默认时区
  3. 您对 log4j 配置进行更改,log4j 观察程序线程会注意到更改,重新初始化记录器层次结构,查看新的默认时区

我在这里建议一些选择:

  • 不要在 servlet 环境中使用 configureAndWatch
  • 不要更改 JVM 范围内的默认 TimeZone,因为这可能会影响许多不相关的组件(例如 log4j,如您所见)。相反,如果您的代码需要输出 GMT 日期,请确保所有代码都通过相同的代码路径来获取您要使用的默认区域,例如,确保所有与时间相关的代码调用类似TimeZone getMyAppDefaultTimeZone()

将 JVM 范围内的默认值更改为仅您的应用程序代码需要的内容可能会产生更大的意外后果。

关于java - log4j 时区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3218144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com