日志未打印日志文件中的异常的完整堆栈跟踪信息

问题描述 投票:-1回答:1

我正在尝试在我的日志文件中打印异常的整个堆栈跟踪记录,而不在代码中添加log.error语句,因为我必须在整个应用程序中进行此通用实现。任何人都可以帮忙,这是log4j2配置xml文件。

 <?xml version="1.0" encoding="UTF-8"?>
 <configuration status="WARN">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <File name="MyFile" fileName="logs/app.log">
        <PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>             
  </appenders>

         <logger name="org.springframework" level="error" additivity="false">
            <AppenderRef ref="MyFile"/>
        </logger>
  <root level="INFO">
      <appender-ref ref="Console"/>

    </root>    

</configuration>
spring-boot log4j2
1个回答
0
投票

没有使用log.error语句,就不可能通过log4j2 xml配置将输出通过管道传输到日志文件。但是,有一种方法可以通过在一个位置集中处理异常而不是在代码中重复进行此操作来优化此方法。

编写一个单独的类,它将最终处理所有异常,您可以使用@ExceptionHandler(Exception.class),它将处理所有异常,在这种情况下,您可以拦截异常并使用log.error(e)注销完整的堆栈跟踪。用@ControllerAdvice(<all_pckages_you_want_cover>)注释此类将确保每当引发未处理的异常时,此异常最终都会在此刻被拦截并记录下来。

参考:https://dzone.com/articles/global-exception-handling-with-controlleradvice

PS:如果您要询问已处理的异常,无论如何都将对它们进行自定义处理,因此您可以在捕获块中添加一行记录它们。

© www.soinside.com 2019 - 2024. All rights reserved.