加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 是否可以在log4j中为堆栈跟踪的每一行添加前缀?

发布时间:2020-12-14 06:00:40 所属栏目:Java 来源:网络整理
导读:当你写作 logger.error("message",exception); log4j生成消息和完整的堆栈跟踪: Aug 9 06:26:13 10.175.60.14 myPrefix: [error] [TP-Processor114] [my.class.Name] message : exceptionat fatherOfExceptionat fatherof_fatherOfExceptionat fatherof_fat
当你写作
logger.error("message",exception);

log4j生成消息和完整的堆栈跟踪:

Aug  9 06:26:13 10.175.60.14 myPrefix: [error] [TP-Processor114] [my.class.Name] message : exception
at fatherOfException
at fatherof_fatherOfException
at fatherof_fatherof_fatherOfException
...

我的转换模式是

log4j.appender.syslog.layout.ConversionPattern=myPrefix: [%p] [%t] [%c] [%x] - %m%n

那么,是否可以使用myPrefix为每一行添加前缀,如下所示:

Aug  9 06:26:13 10.175.60.14 myPrefix: [error] [TP-Processor114] [my.class.Name] message : exception
myPrefix    at fatherOfException
myPrefix    at fatherof_fatherOfException
myPrefix    at fatherof_fatherof_fatherOfException
    ...

当我在myPrefix上grep我的日志时,我看不到堆栈跟踪.我们有许多不同的前缀(每个模块一个)

提前致谢.

解决方法

子类ThrowableRenderer,例如:
import org.apache.log4j.DefaultThrowableRenderer;
import org.apache.log4j.spi.ThrowableRenderer;

public class LogThrowableRenderer implements ThrowableRenderer {

    DefaultThrowableRenderer def = new DefaultThrowableRenderer();

    @Override
    public String[] doRender(Throwable t) {
        String[] temp = def.doRender(t);
        for (int i = 0; i < temp.length; i++) {
            temp[i] = "myPrefix "+temp[i];
        }
        return temp;
    }

}

添加到log4j.properties:

log4j.throwableRenderer=whatever.package.LogThrowableRenderer

这使用现有的DefaultThrowableRenderer在添加前缀之前以熟悉的方式呈现堆栈跟踪,因此它将包括Throwable类,消息和原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读