如何将所有日志输出写入文件Spring Boot

3

我在一个 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();
我已经尝试了Spring文档中的方法。
<?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
将标准输出重定向到文件应该更容易。 - efekctive
像您的主线程正在死亡一样的异常,还是来自Web端点的异常? - rogerdpack
对我来说也是一样的。Micronaut(基于Spring Boot)既不在文件中打印异常,也不在控制台中打印异常。即使我明确地抛出了它。 - Vadim
1
你曾经解决过这个问题吗? - Fabry
1个回答

2
问题在于您在logback-spring.xml文件中为记录器分配的级别。
根据Logback架构文档(您可以在这里查看),“给定记录器L的有效级别等于其层次结构中第一个非空级别,从L本身开始向上沿着层次结构向根记录器移动”。
您将级别“INFO”分配给根记录器,将级别“WARN”分配给记录器“com.mine”。当出现异常时,例如logger.error(Exception e),它们都不会被“调用”。
一种解决方案是将级别“DEBUG”或“ERROR”分配给记录器“com.mine”或根记录器,因为它们已经附加了“FILE” appender。

你改变了日志记录器的级别吗? - Hollman Betzalel Núñez Castro
是的,我在“com.mine”记录器上尝试了“DEBUG”和“ERROR”。 - gary69
问题不在于级别。级别运行良好。只是没有打印未被捕获的异常。 - Vadim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接