gpt4 book ai didi

java - log4j:输出文件取决于源调用类

转载 作者:搜寻专家 更新时间:2023-10-31 20:16:07 24 4
gpt4 key购买 nike

假设我有一个公共(public)类,其中记录器由其名称初始化:

public class SomeCalculationLogic {
private static final Log log = LogFactory.getLog(SomeCalculationLogic .class);

public void doCalculation() {
log.info("doing calculations...");
...
}
}

这个类被两个逻辑上不同的流使用——假设它是从类“BackgroundTask”和“UserRequest”中调用的。如何根据调用类将 SomeCalculationLogic 记录器的输出重定向到不同的日志文件(如 background.log 和 main.log)?

最佳答案

我看到三种可能的方式:

  • 如果足以将所有消息记录到同一个文件中但根据上下文为它们添加不同的前缀,以便它们变得易于过滤,您可以使用嵌套诊断上下文,如 a previous answer of mine 中所述,
  • 如果您绝对需要有单独的日志文件,您可以使用两个不同的记录器和相关的附加程序对您的类进行子类化,正如 Xavier 所建议的(不幸的是,他的解决方案无法正常工作),
  • 或尝试 this alternative solution

子类化解决方案的有效实现是这样的:

public class SomeCalculationLogic {
protected abstract Log getLog();

public void doCalculation() {
getLog().info("doing calculations...");
...
}
}

public class BackgroundCalculationLogic extends SomeCalculationLogic {
private static Log log = LogFactory.getLog(BackgroundCalculationLogic.class);

protected Log getLog() {
return log;
}
}

public class UserRequestCalculationLogic extends SomeCalculationLogic {
private static Log log = LogFactory.getLog(UserRequestCalculationLogic.class);

protected Log getLog() {
return log;
}
}

关于java - log4j:输出文件取决于源调用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3116666/

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