gpt4 book ai didi

java - Logback - 如何单独记录异常的简单名称

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:05 30 4
gpt4 key购买 nike

有什么方法可以只记录异常的简单名称而无需从代码中显式检索它?

例如调用

log.error(exception);

使用回退模式

%d{yyyy-MM-dd}|%-5level|%m%n

不仅仅是记录异常堆栈跟踪

2018-01-01|ERROR|
mainPackage.foo.bar.RocketExplosionException: Houston we have a problem
at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)
at mainPackage.foo.bar.TestThrower.readyToLaunch(TestThrower.java:17)
at mainPackage.ExceptionLauncher.main(ExceptionLauncher.java:38)

预计将记录一个单独的列,其中包含异常的简单名称

2018-01-01|ERROR|RocketExplosionException|
mainPackage.foo.bar.RocketExplosionException: Houston we have a problem
at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)
at mainPackage.foo.bar.TestThrower.readyToLaunch(TestThrower.java:17)
at mainPackage.ExceptionLauncher.main(ExceptionLauncher.java:38)

最佳答案

你可以自己写custom conversion specifier .

为此,您需要在 logback.xml 中为 %exname 符号声明一个转换规则,如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<conversionRule conversionWord="exname" converterClass="com.foo.ExceptionNameConverter" />

...

</configuration>

然后像这样声明ExceptionNameConverter:

import ch.qos.logback.classic.pattern.ThrowableProxyConverter;
import ch.qos.logback.classic.spi.IThrowableProxy;

public class ExceptionNameConverter extends ThrowableProxyConverter {
@Override
protected String throwableProxyToString(IThrowableProxy tp) {
return tp.getClassName();
}
}

现在,使用这个模式:

%d{yyyy-MM-dd}|%-5level|%exname|%m%n

以下日志语句:

logger.error("Boom!", new RuntimeException("ouch"));

将发出:

2018-09-26|ERROR|java.lang.RuntimeException|Boom!

关于java - Logback - 如何单独记录异常的简单名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52509660/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com