Управление местоположением файла журнала через JNDI в Spring? - PullRequest
3 голосов
/ 23 ноября 2010

У меня есть веб-приложение на Java, которое использует фасад ведения журнала SLF4J. На сегодняшний день мы используем реализацию Log4J под ней (хотя мы рассматриваем переход на Logback). Log4J в настоящее время настраивается через файл конфигурации log4j.xml, который находится в корне нашего пути к классам.

В любом случае мы используем JNDI для настройки других аспектов нашего приложения, поэтому я хорошо знаком с тем, как его настроить и извлечь строку из JNDI в файл конфигурации Spring.

Однако я затрудняюсь понять, как создать приложение Log4J из файла конфигурации Spring. А еще лучше, можно ли полностью сконфигурировать Log4J через Spring и вообще пропустить конфигурационный файл log4j.xml? Я надеюсь, что мне не нужно делать это программно.

Я нашел класс Spring с именем Log4jWebConfigurer, но для этого требуется, чтобы прогон WAR взорвался (не хочу, если я могу помочь), а также чтобы файл журнала находился в каталоге веб-приложения (определенно не хочу этого).

1 Ответ

2 голосов
/ 24 ноября 2010

Сначала получите основной каталог через JNDI:

<jee:jndi-lookup id="myAppHome" jndi-name="myAppHome" />

Затем используйте этот компонент в выражении языка выражений 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>#{ myAppHome + '/conf/log4j.xml'}</value>
        </list>
    </property>
</bean>
...