Java/SLF4J:单个类的自定义记录



我有一个带有application.yml的春季启动应用,如下:

logging:
       level:
             com.mycompany.TestClass: OFF

这样,我可以控制类是否输出任何日志。我想做的是,对于此特定类别,将无堆栈跟踪的异常消息格式化(不影响任何非检查记录(。例如,如果某种方法的某种方法会引发异常,我正在记录例外,如下:

try {
  //throw index of bounds exception
} catch(Exception e){
  log.error("Error occurred: " + e)
}

我只需要在零件以下(没有堆栈跟踪(:

Error occurred: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

这根本可能吗?

编辑我正在尝试定位JAR文件的记录 - 我无法访问修改代码...

如果正在使用,则必须在logback.xml中使用异常深度。LogBack中有一个设施,以及SLF4J,您可以在其中提及异常stacktrace的长度。我在片段下方提供。

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- %rEx... prints exception causes in REVERSE order: http://nurkiewicz.blogspot.com/2011/09/logging-exceptions-root-cause-first.html -->
            <pattern>
                <![CDATA[%-19(%date{HH:mm:ss.SSS} [%.8thread]) %-5level   %-128(%-32(%replace(%logger{1}){'^org.wrml.*.',''}) - %msg) %n%rEx]]></pattern>
        </encoder>
    </appender>

您必须使用适当的布局。

请参阅下面的链接以获取更多理解。

https://www.nurkiewicz.com/2011/09/logging-exceptions-root-cause-first.html

https://logback.qos.ch/manual/layouts.html#rootexception

如果要使用application.yml配置,则可以在下面参考链接。

https://springframework.guru/using-yaml-in-spring-boot-boot-to-configure-logback/

您可以尝试使用e.getMessage()而不是仅通过e变量。因此,您的代码看起来像这样:

try {
  //throw index of bounds exception
} catch(Exception e){
  log.error("Error occurred: " + e.getMessage());
}

最新更新