如何将所有日志输出写入文件spring boot

时间:2017-07-12 23:55:35

标签: java logging spring-boot logback

我在spring boot项目中使用logback-spring.xml。我想将所有未捕获的异常记录到文件中。基本上只是将控制台的输出定向到文件。我尝试了几种logback-spring.xml。

我试过这个

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="com.mine" level="WARN" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </logger>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE">
            <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
                <resetJUL>true</resetJUL>
            </contextListener>
        </appender-ref>
    </root>
</configuration>

在我的主要方法SLF4JBridgeHandler.install();

中使用此方法

我从春季文档中尝试过这个

<?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="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

这是我的application.yml

logging:
  file: C:\dev\assessment-tool\logs\application.log
  config: classpath:logback-spring.xml

对于这些,它将记录所有启动日志记录消息,但是当抛出异常而未捕获异常时,它将进入控制台并且不会显示在日志文件中。如何将未捕获的异常发送到日志文件?

1 个答案:

答案 0 :(得分:2)

问题在于您分配给logback-spring.xml文件中记录器的级别。

根据logback体系结构文档,(您可以检查它here)“给定记录器L的有效级别等于其层次结构中的第一个非空级别,从L本身开始并继续在层次结构中向上朝向根记录器“。

您在根记录器上分配级别“INFO”,并在记录器“com.mine”上级别“WARN”。当有异常时,它们都不被“调用”,例如:logger.error(例外e)。

一种解决方案是将“DEBUG”或“ERROR”级别分配给记录器“com.mine”或根记录器,因为它们已将附加程序“FILE”附加。