tomcat - 为什么 Logback-spring 在具有多个服务的 tc-server 上记录到错误的文件位置?

标签 tomcat logging spring-boot logback

我有 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/

相关文章:

logging - 如何使用 Poco 记录器

java - 如何在 Spring Boot 中创建一对多关系

java - Spring Boot - 加载多个 YAML 文件

web-applications - 忽略应用程序 URL 的 webapps 中的文件夹名称

java - 如何检查客户端是否在Java中是本地的

Tomcat Auto Deploy 特性好用吗?

java - 考虑在您的配置中定义类型为 'com.example.conexion.repository.ClienteRepository' 的 bean

java - 使用 Jersey 和 Tomcat 设置 Jackson 2

iis - IIS 日志中列出的浏览器列表

java - 将 System.out 和 System.err 重定向到 slf4j