gpt4 book ai didi

java - 如何记录两个类使用的总体类

转载 作者:行者123 更新时间:2023-12-02 04:23:48 25 4
gpt4 key购买 nike

有一个 A 类和一个 B 类。它们都在组合的帮助下使用 C 类。 A类和B类需要在不同的文件中生成自己的日志,例如:A类生成日志到文件“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");

}

附注我使用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");

}

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

最佳答案

创建 C 类的构造函数,以 logger 作为参数。现在,在任何其他类中实例化 C 时,将该类的记录器传递给 C。类似的东西 -

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

然后在 A 或 B 中,像 -

C c = new C(this.log);
c.method();

关于java - 如何记录两个类使用的总体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32445303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com