Доступ к регистратору в приложении Java - PullRequest
2 голосов
/ 08 февраля 2011

У меня есть вопрос относительно входа в приложение Java. Я хочу регистрировать основные действия пользователя и возможные ошибки с помощью удобных сообщений. Поэтому у меня есть два приложения для регистратора: один показывает ошибки (уровень = ошибка) в диалогах, а другой записывает журналы текущего сеанса пользователя в html-файл, чтобы пользователь мог отправить этот файл обратно, если что-то пойдет не так.

Чтобы избежать создания регистратора в каждом классе (приватный регистратор регистратора =…), у меня есть статическая ссылка на настроенный регистратор в приложении класса, который также имеет методы для доступа к регистратору:

public class App {
    private static Logger logger = Logger.getLogger("logger name");
    …
    public static void logError(String message, Throwable cause) {
    …
    }
    public static void logInfo(String message) {
    …
    }
}

Ведение журнала в основном выполняется в классах пользовательского интерфейса:

class UIWidget extends UIFrameworkWidget {

    void aMethod() {
        try {
            someBusinessLogic();
        } catch (Exception e) {
            App.logError(“log message”, e);
        }
    }
} 

Это хорошая практика? (Обратите внимание, что виджеты создаются платформой.)

Заранее спасибо за ответы, комментарии или советы по этому вопросу

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

Кажется, вы в одном шаге от подкласса JDK Logger. Наличие только одного статического экземпляра предотвращает нацеливание на определенные классы во время выполнения. Если вы подклассифицируете Logger, то у вас все еще может быть много logger'ов в качестве зарегистрированных классов, но при этом вы сохраняете особенности вашего аппендера.

Вы также можете создать свой собственный макет (и, по крайней мере, в log4j, даже добавить заполнители - пример тому есть у geronimo).

2 голосов
/ 08 февраля 2011

Лучше было бы использовать один статический экземпляр Logger, но разрешить каждому классу создавать частный экземпляр, который инициализируется именем класса (и, возможно, другой информацией).Этот частный экземпляр затем использует статический экземпляр для фактического ведения своей регистрации, но при необходимости может быть опущен и сокращает ссылки на внешние классы.

Вот как slf4j делает это, что является структурой ведения журнала, которую вы должны рассмотреть, используя- однако вы можете свернуть свои собственные таким же образом.

Обратите внимание, однако я не знаю, как отобразить ваши сообщения об ошибках в диалоговом окне - это может потребоваться добавить явно.

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