【发布时间】:2020-10-09 08:04:10
【问题描述】:
我们在具有多个 pod 的 kubernetes 集群中运行一个 spring 应用程序作为对一个 tomcat 的战争。所有 pod 都将统计日志文件写入 nfs 共享。所有 pod 都应该写入同一个文件。所以谨慎模式听起来是我们应该使用的东西。
所以我定义了以下 logback appender:
<property name="STATISTIC_LOG_PATTERN" value="%d{yyyy-MM-dd'T'HH:mm:ss:SSSZ},%X{mdc.key1},%X{mdc.key2},%X{mdc.key3},%X{mdc.key4},%X{mdc.key5}, %m %n"/>;
...
<appender name="STATISTIC_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<prudent>true</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${statistic.log.path}/statistics_yeti-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${STATISTIC_LOG_PATTERN}</pattern>
</encoder>
</appender>
....
但生成的日志文件已损坏。有些行不完整,日志文件中有很多 CTRL-@ 特殊字符(nul 提示符)。我找不到有关损坏的 logback 日志文件的任何主题,除了一些建议删除我在配置中没有的文件标签。
据我了解,没有文件标签的文档审慎模式应该足够了吗? Logback 版本是 1.2.3
只有一个 pod 的日志文件是正确的。
【问题讨论】:
-
我建议记录每个实例并聚合日志(例如到弹性)。 Prudent 在文件写入时创建了排他锁,这会带来巨大的性能成本。
标签: spring kubernetes concurrency logback tomcat8