我想将 log4j 消息中的时区信息格式化为以下格式
+hh:mm
完整的时间戳如下所示:
2013-09-05T09:32:10.703+02:00
我知道日期格式说明符
Z
,但输出格式是 +hhmm
而不是 +hh:mm
。所以冒号不见了:
2013-09-10T15:55:34.123+0200
有什么办法可以得到我想要的东西吗?
使用以下模式:
yyyy-MM-dd'T'HH:mm:ss.SSSXXX
java.text.SimpleDateFormat
的 javadoc 中,您可以阅读(对于 X
字母):
ISO 8601 时区:模式字母的数量指定格式化和解析的格式,如下所示:
ISO8601TimeZone:
OneLetterISO8601TimeZone
TwoLetterISO8601TimeZone
ThreeLetterISO8601TimeZone
OneLetterISO8601TimeZone:
Sign TwoDigitHours
Z
TwoLetterISO8601TimeZone:
Sign TwoDigitHours Minutes
Z
ThreeLetterISO8601TimeZone:
Sign TwoDigitHours : Minutes
Z
例如
X -08;
XX -0800;
XXX -08:00
如果你的配置文件是
log4j.xml
,可以如下:
<!-- console -->
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="threshold" value="TRACE" />
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern"
value="%d{yyyy-MM-dd'T'hh:mm:ss.SSSXXX} %-5p (%c.java:%L).%M - %m%n" />
</layout>
</appender>
如果你有一个 Java 类:
import org.apache.log4j.Logger;
public class Main {
private static final Logger LOGGER = Logger.getLogger(Main.class);
public static void main(String[] args) {
LOGGER.info("Test");
}
}
输出如下:
2013-09-12T08:08:18.532-05:00 INFO (Main.java:8).main - Test
我正在使用带有 logback-classic-1.2.3.jar 的 PatternLayout,下面的日期模式给了我悉尼时区,您需要根据 GMT 进行更新
"timestamp":"%d{yyyy-MM-dd HH:mm:ss, GMT+10}"
在模式布局中,您可以定义时间,如下所示在 {UTC} 下指定您想要的时区
<PatternLayout pattern="%d{ISO8601}{UTC}Z" />
将输出以下内容
2024-09-24T22:38:00,901Z
或指定模式如下。您可以将 %d 之后的 {} 中的任何内容编辑为您想要的格式
<PatternLayout pattern="%d{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}"/>
或
<PatternLayout pattern="%d{yyyy-MM-dd'T'HH--mm:ss.SSS'Z'}"/>
或
<PatternLayout pattern="%d{yyyy-MM-dd'T'HH:mm:ss,SSS}"/>