Tomcat 为什么Logback spring在具有多个服务的tc服务器上记录到错误的文件位置?
我有5个服务在同一个tc服务器上运行,每个服务都记录到自己的目录中,如下所示:Tomcat 为什么Logback spring在具有多个服务的tc服务器上记录到错误的文件位置?,tomcat,logging,spring-boot,logback,Tomcat,Logging,Spring Boot,Logback,我有5个服务在同一个tc服务器上运行,每个服务都记录到自己的目录中,如下所示:/app\u logs/service name/service name.log 他们都在使用TimeBasedRollingPolicy,该策略运行良好,只是启动时其中一个服务会随机记录到另一个服务日志文件,并在tc服务器重新启动之前一直在该文件中写入。(然后,另一个服务将执行相同的操作) 是什么导致了这一切 每个services application.yml如下所示: application.yml api:
/app\u logs/service name/service name.log
他们都在使用TimeBasedRollingPolicy,该策略运行良好,只是启动时其中一个服务会随机记录到另一个服务日志文件,并在tc服务器重新启动之前一直在该文件中写入。(然后,另一个服务将执行相同的操作)
是什么导致了这一切
每个services 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
<?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>
<?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>
每个服务在库中共享这两个文件
logbackspring.xml
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
<?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>
<?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>
文件appender.xml
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
<?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>
<?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>
${FILE\u LOG\u PATTERN}
${LOG_文件}
${LOG\u FILE}.%d.%i.gz
14
100MB
编辑
我能够找出问题的原因,但我仍然不知道原因,也不知道这是否是一个常见问题
事实证明,为了让我们的服务更快地启动,我们在tomcat server.xml文件中有:startStopThreads=0
。这将同时启动我们的多个服务。这与我们的logback spring冲突
有人知道为什么会这样吗?这在后来的Spring Boot迭代中已经修复了吗?(使用1.3.6.版本)适用于遇到这种情况的任何人。在我们的例子中,我们可以解决在spring引导应用程序中配置log4j2的问题,这可能是一个特定于logback的问题