Classpath: и весна, журнал 4j - PullRequest
0 голосов
/ 11 апреля 2011

Дорогие все, У меня проблема при попытке инициализации моей конфигурации log4j с весны.

<bean id="log4jInitializer" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="staticMethod">
        <value>org.springframework.util.Log4jConfigurer.initLogging</value>
    </property>
    <property name="arguments">
                      <list>
            <value>classpath:/resources/META-INF/spring/log4j.xml</value>
                            </list>
    </property>
</bean>

java.io.FileNotFoundException: ресурс пути к классу [/resources/META-INF/spring/log4j.xml] не может быть преобразован в URL, поскольку он не существует

Когда я пытаюсь поставить точку останова и посмотреть значение Расположение функции

public static void initLogging (расположение java.lang.String) выбрасывает java.io.FileNotFoundException {/ * скомпилированный код * /}

тогда я вижу, что токен classpath: не был заменен.

Есть ли у вас какие-либо предложения?

Большое спасибо

1 Ответ

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

classpath: / resources / META-INF / spring / log4j.xml

Похоже, вы используете maven.Но maven будет "разбивать" папки src и resources на одну.Таким образом, в случае проекта Maven путь будет: classpath:META-INF/spring/log4j.xml

без косой черты после classpath:


Если вы работаете на сервере, выследует инициализировать каркас ведения журнала перед запуском Spring, потому что сам Spring будет использовать его для регистрации информации при запуске.

Один из способов сделать это - добавить эти строки в файл web.xml (чем вам не нужносделать это в конфигурации пружины)

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/classes/META-INF/log4j.xml</param-value>
</context-param>    
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

Когда я пытаюсь установить точку останова и посмотреть значение Расположение функции

public static void initLogging(java.lang.String location) throws java.io.FileNotFoundException { /* compiled code */ }

Выдействительно уверен?Волшебство делается в строке: URL url = ResourceUtils.getURL(resolvedLocation); Итак, resolvedLocation - это ваша строка "classpath: META-INF ...", но возвращаемый URL - это "переведенный" путь.

Обратите внимание на факт, что функция getURL вызывает исключение, когда местоположение ресурса начинается с classpath: и файл не найден.Поэтому я бы проверил, что произойдет, если я укажу несуществующий файл.-> Если исключение не возникает, то в classpath:.

есть орфографическая ошибка.
...