如何记录两个 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();
有一个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();