正在将Tomcat日志写入syslog而不是Spring Boot和Log4j中的应用程序日志

时间:2017-05-09 06:26:12

标签: spring tomcat spring-boot log4j

它是一个带有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>

1 个答案:

答案 0 :(得分:0)

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

    <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>

根据您的评论:

如果我理解正确,应用程序正在正常运行,那么在异常冒泡时记录到syslog的servlet容器不是吗?

你还可以尝试添加:

<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不相处,可能需要将其提升为{{ 1}}