Не могли бы вы предложить мне шаблон для регистрации исключений в течение жизненного цикла Java-приложения? - PullRequest
0 голосов
/ 12 апреля 2011

Я хочу использовать простой пакет java.util.logging.* для регистрации исключений. Любые предложения, ссылки, статьи, чтобы сделать это в простой, но элегантный способ? Я должен реализовать это в приложении Java EE.

Я думал о синглтон-классе ... что ты думаешь?

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Следующее не обрабатывает случай автоматической регистрации всех исключений, но может приблизить вас. В моей нынешней компании мы расширили Exception с CompanyException, который поддерживал список обратных вызовов. Что-то вроде:

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 или наши внутренние механизмы ведения журнала. Очевидно, что исключение может выполнять саму регистрацию, но мы хотели разделения. У нашего регистратора был специальный поток, чтобы сделать это в фоновом режиме и отправить его на центральный сервер регистрации. Вы должны быть очень осторожными в отношении рекурсии, если вы бросаете во время регистрации.

0 голосов
/ 12 апреля 2011

Вы можете взглянуть на Предложения ведения журнала в Base 22 * ​​1002 *, они довольно простые, но охватывают базовый набор стандартных функций ведения журнала.

Я не рекомендую использовать Singleton, так как в современных каркасах логирования они вам не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...