我有 5 个服务在同一个 tc-server 中运行,每个服务都登录到自己的目录,如下所示:/app_logs/service-name/service-name.log
他们都在使用 TimeBasedRollingPolicy,它运行良好,除了随机启动时的一个服务将记录到不同的服务日志文件并继续写入,直到 tc-server 重新启动。 (然后另一个服务会做同样的事情)
什么可能导致这种情况发生?
每个服务 application.yml 看起来像这样:
application.yml
api:
name: Service-Name
description: random description.
version: v1
logging:
file: /opt/tcserver/dc/app_logs/Service-Name/Service-Name.log
spring:
application:
name: Service-Name
每个服务在库中共享这两个文件
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}" />
<include resource="file-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
文件appender.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- File appender logback configuration provided for import, equivalent to the programmatic initialization performed by
Boot -->
<included>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d.%i.gz</fileNamePattern>
<maxHistory>14</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
</included>
编辑
我能够找出导致问题的原因,但我仍然不知道为什么或者这是否是一个常见问题。
原来,为了让我们的服务更快地启动,我们在我们的 tomcat server.xml 文件中有:
startStopThreads=0
.这会同时启动我们的多项服务。这会导致与我们的 logback-spring 冲突。有谁知道为什么会这样?这是否在 Spring Boot 的后续迭代中得到修复? (使用 1.3.6.RELEASE)
最佳答案
对于任何遇到这种情况的人。在我们的例子中,我们可以通过在 Spring Boot 应用程序中配置 log4j2 来解决这个问题,这可能是特定于 logback 的问题。
关于tomcat - 为什么 Logback-spring 在具有多个服务的 tc-server 上记录到错误的文件位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41597712/