如何记录两个类使用的整体类

时间:2015-09-07 19:57:59

标签: java logging log4j

有一个A类和一个B类。他们都在作文的帮助下使用了C类。 A类和B类需要在不同的文件中生成自己的,例如:A类生成log to file" log_A.log"和B类 - 在" log_B.log"。

我的问题是 - 如何编写一个类C的日志,这个类符合一个调用C类方法的类?我的意思是:如果从类A调用类C的方法,则应生成类C的日志以记录类A的日志文件 - " log_A.log"。如果从类B调用类C的方法,则应该生成类C的日志到文件" log_B.log"。还有一件事 - C类的记录级别应该与A类或B类的记录器相同。

例如,A类:

//loggerA - it's logger that writes to file "log_A.log"
private static final Logger log = Logger.getLogger("loggerA");
public void method(){
    log.debug("Write to log of class A");
    C c = new C();
    c.method(); //activity in class C should be written to "log_A.log" as well
}

在B班:

private static final Logger log = Logger.getLogger("loggerB");
public void method(){
    log.debug("Write to log of class B");
    C c = new C();
    c.method(); //activity in class C should be written to "log_B.log" as well
}

在C班:

private static final Logger log = Logger.getLogger(???);
public void method(){

    log.debug("Any log message");

}

P.S。我使用log4j 1.2.16

我可以尝试执行以下操作: 在C班:

public void method(String logger){
    final Logger log = Logger.getLogger(logger); //Use the logger of calling class
    log.debug("Any log message");

}

但我认为这是一个肮脏的决定

1 个答案:

答案 0 :(得分:2)

创建一个C类构造函数,它将logger作为参数。 现在,在任何其他类中实例化C时,将该类的记录器传递给C. 像 -

这样的东西
class C {
    public C(Logger log) {
        this.log = log;
    }
}

然后在A或B中,像 -

一样使用它
C c = new C(this.log);
c.method();