java - 您能给我建议一种在 java 应用程序生命周期中记录异常的模式吗?

标签 java exception logging jsf-2

我想使用简单的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/

相关文章:

java - android looper和executor线程池的区别

linux - 将所有日志 append 到/var/log

python - 如何覆盖 Gunicorn 的日志记录配置以使用自定义格式化程序

python - 使用 Python 记录器记录到文件和标准错误

java - 如何使用千分尺测量每秒的 http 请求数

java - OPC UA 测试堆栈示例

Java HtmlUnit 表单重定向问题

c# - 我应该如何在 ASP.NET 中记录异常?

delphi - 对 EIdConnClosedGraceively 异常进行故障排除?

c# - 我的应用程序可以在我的 PC (Windows 7) 上运行,但不能在另一台 (XP) 上运行,我不确定如何继续诊断问题