如何为日志记录器包装日志方法而不丢失调用者方法的名称?



我正在尝试为java.util.Logger添加一些方便的方法。我希望这些方法可以简化我下一个Java应用程序的编码:

public void severeException(Exception e, String msg) {
super.severe(msg);
super.severe(e.getClass().getCanonicalName());
super.severe(e.getMessage());
}
public void severeLoadingFile(Exception e, String filePath) {
super.severe("Could not load file '" + filePath + "'");
super.severe(e.getClass().getCanonicalName());
super.severe(e.getMessage());
}
public void severeLoadingFile(String filePath) {
super.severe("Could not load file '" + filePath + "'");
}

它们在我想要报告异常时必须编写的代码行数中表示1:2到1:3的比例。对于众所周知的异常,有一大堆类似的方法,比如IOException加载文件,等等。

到目前为止,我已经尝试扩展Logger作为CustomLogger,这导致我在调用getLogger()方法时出现类加载器和模块的问题。然后我尝试通过它的构造函数初始化CustomLogger

除了构造函数和类装入器的问题之外,这似乎不是方法,因为调用方方法被我的包装方法所困。

我已经扫描了Logger源代码,但没有找到一个简单的方法来调用log()传递它的调用者的名字或类似的东西。

任何想法?

这不是不可能的,但可能会影响性能。在日志方法中,您可以通过堆栈跟踪元素(https://docs.oracle.com/javase/8/docs/api/java/lang/StackTraceElement.html)找到调用者的名称。

System.out.println(Thread.currentThread().getStackTrace()[1]);

我支持Anders正确使用日志框架的想法。

最新更新