如何有效地在多个类中使用静态Logger?

时间:2016-04-28 15:06:17

标签: java logging log4j

我有三节课。

  • BaseLogger - 我们在这里创建Logger的静态实例。
  • BaseClass - 包含几乎每个类中使用的常用方法的Frameworklevel类。
  • SomeClass - 它实现了BaseClass并记录了一些信息。

BaseLogger

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;


public class BaseLogger {
    public final static Logger LOG =  LogManager.getLogger(BaseLogger.class);
}

基类

  public class BaseClass extends BaseLogger{
        //Some common methods used throughout Application.
    }

SomeClass的

public class SomeClass extends BaseClass{
    public static void main(String[] args){
        LOG.info("Test Log");
    }
}

输出

2016-04-28 16:52:11 INFO  BaseLogger:7 - Test Log 

需要:有人可以指导我如何实现以下目标。

 2016-04-28 16:52:11 INFO  SomeClass:5 - Test Log

由于我已经使用过static,我不允许在 LogManager.getLogger 中使用这个而我不得不使用BaseLogger Class name可以有人指导我如何打印当前类如果从其他类调用LOG,则使用name而不是BaseLagger。

1 个答案:

答案 0 :(得分:1)

在日志记录框架(Java util,apache日志记录,jboss日志记录等)中定义的记录器模式%c从调用logger方法的类中获取完全限定的类名。

要以所需的方式获取类名,您需要使记录器模式适应自定义模式,即%X {classname}

在此处,可以在使用MDC.put(“ classname”,com.xxx.xxx)调用logger之前在班级中设置班级名称