区域设置< => Tomcat日志中的时间/日期格式?

时间:2015-09-30 09:41:35

标签: java windows tomcat7 locale java-7

从Eclipse运行时,我似乎无法更改Tomcat日志中的语言环境/日期格式。它使用12小时制,我希望它使用24小时制(语言是英语,已经是我想要的)。这是我到目前为止所尝试的内容:

  • 在Tomcat的启动配置中将LANGLC_ALL环境变量设置为en_GB
  • 在Tomcat的启动配置中向VM选项添加-Duser.language=en -Duser.region=GB
  • -Duser.language=en -Duser.region=GB添加到Eclipse' eclipse.ini
  • -Duser.language=en -Duser.region=GB设置为JRE配置中的默认VM参数

如果我从shell运行Tomcat,它会在-Duser.language=en -Duser.region=GB中将%JAVA_OPTS%添加到bin\catalina.bat - 按照预期正常工作 - 例如outlined here - 但这并不是当然,当它从Eclipse中运行时会影响Tomcat。 (错误:我无法重现这一点,并且必须假设我错误地使用Java 6而不是7运行Tomcat )

使用过的软件:Tomcat 7.0.54,Oracle JDK 1.7.0_60(64位),Windows 8(64位)

更新:感谢Michael-O的回答,我知道自Java 7以来Java's locale-resolution发生了变化。的确,回到Java 6解决了我的问题并给了我24小时制 - 但这对我目前的项目来说是不可行的。

我无法在Java 7中实现相同的功能。据说,您可以通过将系统属性sun.locale.formatasdefault设置为true来返回旧的语言环境解析,但是这似乎不会影响Tomcat 7的所有日志记录中的时间显示。过了一会儿,我找到了this bug,其中陈述得相当清楚:

  

(...)我们失去了根据语言环境决定24小时和12小时的能力,但是我们通过为java.util.logging.SimpleFormatter.format提供格式字符串来获得覆盖默认格式的能力。 logging.properties中的属性。

因此,似乎手动定义这个格式字符串是(仅?)的方式,Michael-O也建议,所以我接受了他的回答。

在深入研究java.util.Formatter's syntax的疯狂之后,我现在已经解决了这个格式字符串,需要将其放在Tomcat的启动配置中的VM选项中:

-Djava.util.logging.SimpleFormatter.format="%1$ty%1$tm%1$td_%1$tH%1$tM%1$tS_%1$tL %4$4.4s %3$s %5$s %n"

输出:

151003_195915_359 INFO org.apache.coyote.http11.Http11Protocol Starting ProtocolHandler ["http-bio-8080"] 
151003_195915_375 INFO org.apache.coyote.ajp.AjpProtocol Starting ProtocolHandler ["ajp-bio-8009"] 
151003_195915_375 INFO org.apache.catalina.startup.Catalina Server startup in 1280 ms

或者更短,对于ISO 8601时间戳使用:

-Djava.util.logging.SimpleFormatter.format="%tFT%<tT.%<tL %4$4.4s %3$s %5$s %n"

输出:

2015-10-03T19:37:03.703 INFO org.apache.coyote.http11.Http11Protocol Starting ProtocolHandler ["http-bio-8080"] 
2015-10-03T19:37:03.703 INFO org.apache.coyote.ajp.AjpProtocol Starting ProtocolHandler ["ajp-bio-8009"] 
2015-10-03T19:37:03.703 INFO org.apache.catalina.startup.Catalina Server startup in 1189 ms 

2 个答案:

答案 0 :(得分:2)

您可能已经受到Java 7中this更改的影响。

我看到的唯一解决方案是ISO 8601的自定义格式化程序。

答案 1 :(得分:0)

希望您需要更改catalina.out中的日期格式。请如下修改您的logging.properties

对于org.apache.juli.OneLineFormatter

java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
org.apache.juli.OneLineFormatter.timeFormat = yyyy-MM-dd HH:mm:ss

对于java.util.logging.SimpleFormatter

java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format = "%4$s: %5$s [%1$tc]%n"