spring boot:在控制台中打印的stacktrace不在日志文件中

时间:2018-05-09 14:50:38

标签: java spring-boot logback

以下是我的springboot应用程序中的logback.xml配置。

<property name="LOG_DIR" value="${LOG_DIR}" />
<property name="LOG_FILE" value="${LOG_FILE}" />

<appender name="ROLLING_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_DIR}/${LOG_FILE}</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${LOG_DIR}/${LOG_FILE}_old.%i.log</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>100</maxIndex>
    </rollingPolicy>

    <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        </Pattern>
    </encoder>

</appender>

<root level="info">
    <appender-ref ref="ROLLING_LOG" />
</root>

使用以下命令启动应用程序

java -DLOG_DIR=/logs -DLOG_FILE=my.log -jar target/my.jar

我在所有班级都使用@ Sl4j。 所有日志都打印在日志文件中,除了 exception的stacktrace(e.printStackTrace)。之外,它会在控制台中打印出来。

不是重复的帖子,几乎所有的帖子都找不到合适的答案

感谢任何帮助

由于

1 个答案:

答案 0 :(得分:3)

Javadoc中所述:

  

将此throwable及其回溯打印到标准错误流。

因此,除非您通过SLF4J记录异常,否则堆栈跟踪将不会打印在您的文件中。

如果您不控制对printStackTrace的调用,则可以重定向java命令的输出以附加到文件。

java -DLOG_DIR=/logs -DLOG_FILE=my.log -jar target/my.jar >> console.log 2>&1

以上内容会将所有文本附加到文件 console.log ,并将标准错误流重定向到标准输出流