Правильное использование LOG4J в Spring Framework через DI - PullRequest
6 голосов
/ 31 января 2010

Я пытаюсь использовать Log4j как часть Spring Framework, насколько я понимаю, используя соответствующий боб система должна отображать единичный экземпляр, доступный в коде при автоматическом сопоставлении глубины каротажа с классом

Аналогично обычному использованию Log4J, как в

Logger log = Logger.getLogger(getClass());

я использовал следующее определение bean-компонента Spring

<bean id="log4jInitialization"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass"
        value="org.springframework.util.Log4jConfigurer" />
    <property name="targetMethod" value="initLogging" />
    <property name="arguments">
        <list>
            <value>conf\log4j.xml</value>
        </list>
    </property>
</bean>

Но я не могу сопоставить этот бин конкретному члену в данном классе и при этом я не могу использовать это через @ autowired

Пожалуйста, дайте мне знать, если есть какие-нибудь лучшие способы интеграции Log4j и Spring

С наилучшими пожеланиями

Mark

1 Ответ

6 голосов
/ 31 января 2010

Короткий ответ на ваш вопрос заключается в том, что log4j не поддерживает DI.

Метод Log4jConfigurer.initLogging() имеет возвращаемое значение void, поэтому вводить нечего. Идея состоит в том, что вы вызываете этот метод, который загружает log4j, а затем вы используете API Log4j как обычно (используя Logger.getLogger(getClass())).

Как правило, вы не настроите Log4jConfigurer как bean-компонент Spring, однако, чаще вы вызываете его непосредственно из собственного кода во время запуска приложения.

Если это веб-приложение, то Spring предоставляет альтернативы Log4jConfigurer, которые лучше подходят для этой среды (Log4jWebConfigurer, Log4jConfigListener).

Кстати, 2 года назад я подал запрос функции , чтобы разрешить автоматическое подключение регистраторов, и он наконец был помечен как исправление для Spring 3.1. Horray.

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