我想使用简单的java.util.logging.*
包来记录异常。有什么建议、链接、文章可以以基本但优雅的方式做到这一点吗?
我应该在 Java EE 应用程序中实现它。
我正在考虑一个单例类......你觉得怎么样?
最佳答案
以下内容不处理自动记录所有异常的情况,但可能会让您更接近。在我当前的公司,我们使用支持回调列表的 CompanyException
扩展了 Exception
。像这样的东西:
public abstract class CompanyException extends Exception {
private static final List<ExceptionCallback> callBacks =
new ArrayList<ExceptionCallback>();
public CompanyException(String message) {
super(message);
invokeCallbacks();
}
// register class to be called whenever exception is constructed
public static void registerCallback(ExceptionCallback callback) {
// we expect the registers to be done long before the first exception thrown
List<ExceptionCallback> newCallbacks = new ArrayList<ExceptionCallback>();
newCallBacks.addAll(callBacks);
newCallbacks.add(callback);
callBacks = newCallBacks;
}
private void invokeCallbacks() {
for (ExceptionCallback callBack : callBacks) {
try {
callBack.exceptionConstructed(this);
} catch (Throwable th) {
// ignore it because we can't go recursive
}
}
}
}
回调是一个简单的接口(interface):
public interface ExceptionCallback {
public void exceptionConstructed(Exception exception);
}
然后我们所有的内部异常都会抛出这些异常或者重新抛出/包装外部异常。然后,我们将注册一个日志记录类,它可以使用 log4j 或我们的内部日志记录机制来记录异常。显然,异常可以自己进行日志记录,但我们希望将其分开。我们的记录器有一个专用线程在后台执行此操作并将其发送到中央日志服务器。如果在记录时抛出异常,则需要非常小心递归。
关于java - 您能给我建议一种在 java 应用程序生命周期中记录异常的模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5628613/