繁体   English   中英

如何创建log4j包装并获取正确的日志

[英]How create log4j wrap and get correct logs

我有多线程应用程序,我想在我创建工厂和扩展类的每条日志消息中添加一些文本信息,它可以正常工作

...
protected Logger logger = Logger.getLogger("Test", new MyLog4JFactory());
...

import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerFactory;

public class MyLog4JFactory implements LoggerFactory{
    @Override
    public Logger makeNewLoggerInstance(String arg0) {
        return new MyLogger(arg0);
    }

}


import org.apache.log4j.Logger;
public class MyLogger extends Logger{
    protected MyLogger(String name) {
        super(name);
    }
    private String getMessage(Object msg){
        StringBuffer sb = new StringBuffer();
        return sb.append(msg).append(" ").append("My text").toString();
    }
    @Override
    public void debug(Object message) {
        super.debug(getMessage(message));
    }
    @Override
    public void error(Object message) {
        super.error(getMessage(message));
    }
    @Override
    public void fatal(Object message) {
        super.fatal(getMessage(message));
    }
    @Override
    public void info(Object message) {
        super.info(getMessage(message));
    }
    @Override
    public void warn(Object message) {
        super.warn(getMessage(message));
    }
}

但! 在日志中,我看到了包装器类

所有日志打印为

2011-09-08 10:45:49,359调试MyLogger (35) -Test1我的文本

日志文件显示一个类(带有行号)调用记录器时,我该怎么办?

我知道这是一个老问题,但是我想分享一个很好的解决方案:

将FQCN添加到您的类中,调用Logger.log方法,并将其传递给FQCN,如下所示:

public class MyLogger extends Logger{
    private static String FQCN = MyLogger.class.getName();
    ...

    @Override
    public void debug(Object message) {
        super.log(FQCN, org.apache.log4j.Level.DEBUG,message, null);
    }


    @Override
    public void debug(Object message,Throwable t) {
        super.log(FQCN, org.apache.log4j.Level.DEBUG,message, t);
    }
}

(相同的方法也可以创建包装器...)

在您的log4j.properties文件中,从看起来像这样的行中删除%l说明符:

log4j.appender.A1.layout.ConversionPattern=<...>

ConversionPattern可以是PatternLayout或其他东西。 这将阻止显示完全合格的呼叫类名称和线路号。

有关说明符的更多信息,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM