有一个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");
}
但我认为这是一个肮脏的决定
答案 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();