Sping Boot Slf4j将日志时间戳更改为使用UTC时区

pnwntuvh  于 2022-11-05  发布在  Spring
关注(0)|答案(5)|浏览(101)

使用默认日志记录器设置并使用lombok的@Slf4j的Sping Boot 应用程序
打印日志,如{"timestamp":"2020-02-26T11:25:57.485-05:00" ..........}显示的时间11:25为EST或纽约时区
我们如何将其更改为UTC时区的日志时间戳?
我试过设置
logging: pattern: dateformat: yyyy-MM-dd HH:mm:ss.SSS, UTC
同时使用以下命令设置JVM级别timzone
@PostConstruct TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
我也尝试过在application.yaml中配置
logging: pattern: console: '%d{"yyyy/MM/dd HH:mm:ss,SSS,UTC"} [%p] [%t] %M\(%F:%L\) - %msg%n'

qfe3c7zg

qfe3c7zg1#

slf 4j文档中描述的您遇到的问题
在检查日期格式后,我注意到日期格式

logging:
   pattern:
     dateformat: you date format

由于某种原因无法工作
但如果您使用控制台配置,它将工作

logging:
  pattern:
    console: '%date{"yyyy/MM/dd HH:mm:ss,SSS", UTC} [%p] [%t] %M\(%F:%L\) - %msg%n'

请注意,撇号应该只出现在日期格式上,而不出现在时区上,因为time sone是slf 4j日期格式解析器函数的第二个参数。
如slf 4j文档中所述:
常见错误-假设逗号','字符被解释为参数分隔符,则模式HH:mm:ss,SSS将被解释为模式HM:mm:ss和时区SSS。如果希望在日期模式中包含逗号,则只需将该模式括在引号中。例如,%date{“HH:mm:ss,SSS”}。

emeijp43

emeijp432#

因此,提供的答案似乎不起作用。但以下格式有效:
%date{“年-月-日时:分:秒.SSSZ”}{美洲/丹佛}

mqxuamgl

mqxuamgl3#

下面的一个工作为我从UTC到CDT的变化。
%date{“yyyy-MM-dd时:分:秒.SSSZ”,“美洲/芝加哥”}

qojgxg4l

qojgxg4l4#

使用SpringBoot 2.6.6和(默认的)回登录,这对我很有效:

logging:
  pattern:
    dateformat: "\"yyyy-MM-dd'T'HH:mm:ss,SSSXXX\", UTC"

生成的时间戳如下所示:2022-04-27T13:41:38,500Z

iyfamqjs

iyfamqjs5#

我通过添加{GMT+x}更改了我的Spring Boot 应用程序日志时区,例如:({GMT+0})到我的LOG_PATTERN。因为你也使用了logback @slf4j注解和 Spring Boot 它应该工作。

logging:
  pattern:
    console: '%d{"yyyy/MM/dd HH:mm:ss,SSS,UTC"}{GMT+0} [%p] [%t] %M\(%F:%L\) - %msg%n'

相关问题