Регистрация в Eclipse-RCP «общих» комплектов - PullRequest
1 голос
/ 30 марта 2012

Я уверен, что вы столкнулись с ситуацией, когда существует проект, который представляет собой одновременно пакет и, например, JAR (или другой архив), который развернут на сервере.Часто такие проекты содержат постоянные сущности, утилиты и т. Д., Которые можно использовать на клиенте и на сервере.

Мой вопрос: каков наилучший способ настройки ведения журнала в этом случае?Обычно клиент имеет отдельный пакет с API-интерфейсом для журналирования.Но что делать с сервером и входить в этот «общий» проект?Сервер может иметь свой собственный настроенный регистратор - это нормально, но тогда «обычному» проекту потребуется собственный регистратор?Разве это уже не излишество?Является ли хорошей практикой вообще входить в «общий» проект?

В настоящее время моя ситуация следующая - внутри общего проекта есть оболочка для log4j Logger - нашего собственного Logger.У него есть метод getLogger, который пытается настроить регистратор, если он еще не настроен, например:

private static final String LOG4J_XML_CONFIG = "log4j.xml";
    public static Logger getLogger(final String loggerName) {
        configureLogger();
        return new Logger(org.apache.log4j.Logger.getLogger(loggerName));
    }
private static void configureLogger() {
    if (!org.apache.log4j.Logger.getRootLogger().getAllAppenders().hasMoreElements()) {
        final URL configFileResource = Logger.class.getResource(LOG4J_XML_CONFIG);
        if (configFileResource != null) {
            DOMConfigurator.configure(configFileResource);
        } else {
            org.apache.log4j.Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));
        }
    }
}

Теперь, в принципе, как я понимаю, в двух разных случаях регистратор должен быть настроен по-разному - еслизапрос приходит от клиента, он должен войти в client.log, если запрос приходит с сервера, то в server.log НА СЕРВЕРЕ.Но как я могу загрузить разные конфиги в зависимости от запроса или может быть ClassLoader?

Более того, если это пакет, то log4.xml не может содержать никаких ссылок на классы из проекта, который он не делает.Не знаю, как некоторые Appenders, которые используются на сервере.

Редактировать: ладно, это на самом деле работает нормально, если «общий» плагин зависит от плагина регистрации (где ваш log4j, slf4j или что-то еще)в комплекте), а не log4j.jar!На стороне сервера он будет использовать ваш lib / log4.jar.Журналы от «общего» плагина появятся в client.log или server.log, в зависимости от того, откуда поступил запрос.

Так что это дилемма.Любая помощь будет высоко ценится.

...