log4j:时区格式

问题描述 投票:0回答:3

我想将 log4j 消息中的时区信息格式化为以下格式

+hh:mm
完整的时间戳如下所示:

2013-09-05T09:32:10.703+02:00

我知道日期格式说明符

Z
,但输出格式是
+hhmm
而不是
+hh:mm
。所以冒号不见了:

2013-09-10T15:55:34.123+0200

有什么办法可以得到我想要的东西吗?

java timezone log4j
3个回答
14
投票

使用以下模式:

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

0
投票

我正在使用带有 logback-classic-1.2.3.jar 的 PatternLayout,下面的日期模式给了我悉尼时区,您需要根据 GMT 进行更新

"timestamp":"%d{yyyy-MM-dd HH:mm:ss, GMT+10}"

0
投票

在模式布局中,您可以定义时间,如下所示在 {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}"/>
© www.soinside.com 2019 - 2024. All rights reserved.