我正在尝试为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正确使用日志框架的想法。