是否可以在log4j中为stacktrace的每一行加上前缀? [英] Is it possible to prefix every line of a stacktrace in log4j?

查看:92
本文介绍了是否可以在log4j中为stacktrace的每一行加上前缀?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

写的时候

logger.error("message", exception);

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

log4j produces the message and the complete stack trace :

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前缀,如:

So, is it possible to prefix every line with myPrefix, as :

    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上登录日志时,看不到堆栈跟踪.我们有许多不同的前缀(每个模块一个)

When I grep my logs on myPrefix, i don't see the stack trace. We have many different prefixes (one per module)

提前谢谢.

推荐答案

子类,例如:

Subclass ThrowableRenderer, for example:

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类,消息和原因.

This uses the existing DefaultThrowableRenderer to render the stacktrace in the familiar way before adding the prefix, so it will include the Throwable class, message, and cause.

这篇关于是否可以在log4j中为stacktrace的每一行加上前缀?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆