Java Log4j登录调用类
我在一个项目中使用Log4j,根据调用类所在的包将其日志重定向到多个不同的文件。但是,我的项目有一些在整个项目中使用的util类,我希望根据调用类将它们的日志附加到相应的日志中。如果出现错误,我可以抛出异常,但如果出现警告,这不是一个好主意。是否有办法根据调用类“重定向”util类的日志?您可以使用stacktrace获取调用方(请参阅),但这可能会影响应用程序的性能 另一种选择是使用线程本地存储来设置当前使用的记录器——但在我看来,这还是有点过头了Java Log4j登录调用类,java,logging,log4j,Java,Logging,Log4j,我在一个项目中使用Log4j,根据调用类所在的包将其日志重定向到多个不同的文件。但是,我的项目有一些在整个项目中使用的util类,我希望根据调用类将它们的日志附加到相应的日志中。如果出现错误,我可以抛出异常,但如果出现警告,这不是一个好主意。是否有办法根据调用类“重定向”util类的日志?您可以使用stacktrace获取调用方(请参阅),但这可能会影响应用程序的性能 另一种选择是使用线程本地存储来设置当前使用的记录器——但在我看来,这还是有点过头了 我不知道有什么“标准”的方法可以做到这一点…
我不知道有什么“标准”的方法可以做到这一点…我想向您推荐两种解决方案:
如果你的项目不大,重构也不会是个大问题,我会放弃静态方法。这样,您就可以使用injection将
记录器
传递到实用程序类,无论您在哪里需要它:
public class MyUtils {
private final Logger logger;
public MyUtils (Logger logger) {
this.logger = logger;
}
public void doSomething(...) {
// use the logger
}
}
然后在最顶层的父类中实例化实用程序类,并在子类中使用相同的实用程序类;差不多
public abstract class BaseClass {
// You can use log4j to log in different files;
// e.g. you would probably want all child classes of BaseClass to use the same log
private static final Logger LOGGER = Logger.getLogger("some_log");
// Doesn't have to be static, but one instance would be enough in this case
private static final MyUtils UTILS = new MyUtils(LOGGER);
}
然后在子类中,您将使用如下实用程序类:
getUtils().doSomething();