【问题标题】:Tomcat logs are being written to syslog instead to the application log in Spring Boot and Log4jTomcat 日志正在写入 syslog,而不是写入 Spring Boot 和 Log4j 中的应用程序日志
【发布时间】:2017-05-09 06:26:11
【问题描述】:

这是一个使用 Log4j 进行日志记录的 Spring Boot 应用程序。 来自org.apache.catalina.* 的所有日志都将发送到 syslog,其中还包括未捕获的异常。

我们的应用使用 Log4j (v1),因为它使用使用 Log4j 的旧代码依赖项。

Spring Boot 版本是1.5.2.RELEASE

我相信通过正确的设置,tomcat 日志也将写入log4j.xml 中配置的同一文件,但我找不到该问题的任何答案。

pom.xml(相关部分):

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <version>${spring.boot.version}</version>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<!-- Spring Logging -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j</artifactId>
  <version>1.2.8.RELEASE</version>
</dependency>

log4j.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
    xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} [%t] %5p %c{1} - %m%n" />
        </layout>
    </appender>

    <!-- File appender -->
    <appender name="logFileAppender" class="org.apache.log4j.FileAppender">
        <param name="File" value="/tmp/myappname.log"/>
        <param name="Append" value="true" />
        <param name="BufferedIO" value="false" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} [%t] %5p %c{1} - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="INFO"/>
        <appender-ref ref="consoleAppender" />
        <appender-ref ref="logFileAppender" />
    </root>
</log4j:configuration>

【问题讨论】:

  • 把你的日志文件写在/tmp是不是个好主意
  • 那是与问题无关的dev log4j.xml +

标签: spring tomcat spring-boot log4j


【解决方案1】:

您可以尝试在执行器工件中排除它吗?

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

根据您的评论:

如果我理解正确,应用程序的日志记录很好,当异常冒泡时,它是 servlet 容器记录到 syslog,不是吗?

您也可以尝试添加:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-logging-log4j</artifactId>
</dependency>

和/或传递 log4j 配置文件所在的位置:

-Dlog4j.configuration=<path to file>

如果这些不起作用,我唯一能想到的是您使用的Spring Boot 1.5.x 与Log4j 不兼容,可能需要将其提升到Log4j2

【讨论】:

  • 它没有解决问题。调用抛出 NPE 的端点将其记录到 syslog
  • 没用,但是我使用的是 SB 1.5,这可能是问题所在。我确定有一种解决方法,但仍然找不到。
猜你喜欢
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 2020-03-30
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多