繁体   English   中英

您能建议我一个在Java应用程序生命周期内记录异常的模式吗?

[英]Could you suggest me a pattern to log exceptions during java application lifecycle?

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

回调是一个简单的接口:

public interface ExceptionCallback {
    public void exceptionConstructed(Exception exception);
}

然后,我们所有的内部异常都会抛出这些异常或重新抛出/包装外部异常。 然后,我们将注册一个日志记录类,该类可以使用log4j或内部日志记录机制记录异常。 显然,异常本身可以进行日志记录,但是我们希望进行分离。 我们的记录器有一个专用线程在后台执行该操作并将其发送到中央记录服务器。 如果在记录日志时抛出异常 ,则需要非常小心递归。

您可以看一下Base 22的日志记录建议 ,它们很基本,但是涵盖了一组基本的标准日志记录功能。

我不鼓励使用Singleton,因为对于现代的日志记录框架,您不需要它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM