我在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
对于这些,它将记录所有启动日志记录消息,但是当抛出异常而未捕获异常时,它将进入控制台并且不会显示在日志文件中。如何将未捕获的异常发送到日志文件?
答案 0 :(得分:2)
问题在于您分配给logback-spring.xml
文件中记录器的级别。
根据logback体系结构文档,(您可以检查它here)“给定记录器L的有效级别等于其层次结构中的第一个非空级别,从L本身开始并继续在层次结构中向上朝向根记录器“。
您在根记录器上分配级别“INFO”,并在记录器“com.mine”上级别“WARN”。当有异常时,它们都不被“调用”,例如:logger.error(例外e)。
一种解决方案是将“DEBUG”或“ERROR”级别分配给记录器“com.mine”或根记录器,因为它们已将附加程序“FILE”附加。