如何记录两个 classes 使用的总体 class

How to log overall class used by two classes

有一个class A和一个class B。他们都在组合的帮助下使用class C。 ClassA和classB需要在不同的文件中生成自己的,例如:classA生成日志到文件"log_A.log"和classB-在"log_B.log".

我的问题是 - 如何根据调用 class C 方法的 class 编写 class C 的日志?我的意思是:如果从 class A 调用了 class C 的方法,则应生成 class C 的日志以记录 class A - [=31 的日志文件=].如果从 class B 调用了 class C 的方法,则应将 class C 的日志生成到文件 "log_B.log"。还有一件事 - class C 的日志记录级别应该与 class A 或 B 的记录器相同。

例如,class答:

//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
}

在class 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
}

在class C:

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

    log.debug("Any log message");

}

P.S。我使用 log4j 1.2.16

我可以尝试做以下事情: 在class C:

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

}

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

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

class C {
    public C(Logger log) {
        this.log = log;
    }
}

然后在 A 或 B 中,像 -

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