【问题标题】:Timezone change in pivotal cloud foundry关键云代工厂的时区变化
【发布时间】:2018-09-04 13:18:14
【问题描述】:

我在 PCF(Pivotal Cloud Foundry)中的 Spring Boot 应用程序在 UTC+5:30 中显示“new Date()”的日志和输出,我想将此时区更改为 UTC-5:00(即 CDT)。我遇到了这个帖子: CloudFOundry timezone change

但是在进行了类似的更改之后,它似乎对我的日志记录时间戳没有任何影响。但是,我确实得到了不同的“新日期()”输出,因为它是

2018-09-04T18:40:06.025+05:30 [APP/PROC/WEB/0] [OUT] ########## HIT. Tue Sep 04 13:10:06 GMT 2018

但这也是错误的,新的 Date() 应该打印“Tue Sep 04 08:10:06 GMT 2018

我的 manifest.yml 有以下内容

---
  path: target/VFS-ConfigClient-0.0.1-SNAPSHOT.jar
  memory: 1G
  disk_quota: 1G
  instances: 1
  buildpack: https://github.com/cloudfoundry/java-buildpack.git
  applications:
  - name: VFS-ConfigClient
    env: 
      SPRING_PROFILES_ACTIVE: nonProd_test
      TZ: CDT

我的 log4j.properties 有以下内容

# Logging Mechanism
log4j.rootLogger = DEBUG, A1
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.logger.com.centurylink = INFO, DEBUG, ERROR
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stderr.layout = org.apache.log4j.PatternLayout

# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

如果有人能指出我正确的方向,不胜感激。

【问题讨论】:

  • 你当然不想要08:10:06 GMT,那就错了。我想你想要08:10:06 CDT
  • 使用OffsetDateTime.now(ZoneOffset.ofHours(-5) 或者ZonedDateTime.now(ZoneId.of("America/Chicago")) 代替new Date()
  • 您好 Ole,是的,这将更改应用程序时间戳。另一种方式>> [ TimeZone.setDefault(TimeZone.getTimeZone("America/Chicago")) ];我不想在 java 层中添加它,所以找到了一个替代解决方案来在清单文件中应用类似的修复。感谢您提供此替代解决方案。
  • TimeZone 是过时的类。如果您可以选择,我更喜欢ZoneId。无论如何,感谢您的反馈。

标签: java timezone log4j cloud-foundry


【解决方案1】:

最后认为这是在 Cloud Foundry 中记录正确时间戳的明显更改。下面是解决它的更改(最后一行中的 JAVA_OPTS env 变量)。谢谢大家帮助我。

---
  path: target/VFS-ConfigClient-0.0.1-SNAPSHOT.jar
  memory: 1G
  disk_quota: 1G
  instances: 1
  buildpack: https://github.com/cloudfoundry/java-buildpack.git
  applications:
  - name: VFS-ConfigClient
    env: 
      SPRING_PROFILES_ACTIVE: nonProd
      JAVA_OPTS: -Duser.timezone=America/Chicago

【讨论】:

  • 这将在 JVM 启动时设置它的时区。请注意,您的程序的某些部分或在同一 JVM 中运行的其他程序可能会在以后更改它。
【解决方案2】:

您必须在 log4j 设置中维护格式。这个SO Forum有很好的细节

【讨论】:

  • 我在 log4j.properties 中添加了以下两行,并且还导入了 lg4j-extras,但这对记录器时间戳没有影响。:/log4j.appender.stdout.layout=org.apache。 log4j.EnhancedPatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601}{America/Chicago} %p [%c] - %m%n
  • 我上面引用的 SO 论坛有效。我不确定你在这里犯了什么确切的错误
猜你喜欢
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
相关资源
最近更新 更多