Конфигурация Log4J2 в сервлете 3.0

Я пытался настроить LOG4J в соответствии с документацией (и соответствующими вопросами SO), но он не создает предполагаемый файл, но в WildFly есть такой журнал:

No Log4j context configuration provided. This is very unusual

веб.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="30">
    <!-- http://logging.apache.org/log4j/2.x/manual/configuration.html -->
    <Properties>
        <Property name="filename">c:/oauth.log</Property>
    </Properties>

    <Filter type="ThresholdFilter" level="trace"/>

    <Appenders>
        <Appender type="File" name="File" fileName="${filename}">
            <Layout type="PatternLayout">
                <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
            </Layout>
        </Appender>
        <File name="MyFile" fileName="c:/oauth2.log" immediateFlush="true">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>

    <Loggers>
        <Logger name="cz.literak.demo" level="debug" additivity="true">
            <AppenderRef ref="File"/>
        </Logger>
        <Root level="error">
            <AppenderRef ref="MyFile"/>
        </Root>
    </Loggers>

</Configuration>
0.xsd" version="3.0"> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j2.xml</param-value> </context-param>

app.war/WEB-INF/классы/log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="30">
    <!-- http://logging.apache.org/log4j/2.x/manual/configuration.html -->
    <Properties>
        <Property name="filename">c:/oauth.log</Property>
    </Properties>

    <Filter type="ThresholdFilter" level="trace"/>

    <Appenders>
        <Appender type="File" name="File" fileName="${filename}">
            <Layout type="PatternLayout">
                <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
            </Layout>
        </Appender>
        <File name="MyFile" fileName="c:/oauth2.log" immediateFlush="true">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>

    <Loggers>
        <Logger name="cz.literak.demo" level="debug" additivity="true">
            <AppenderRef ref="File"/>
        </Logger>
        <Root level="error">
            <AppenderRef ref="MyFile"/>
        </Root>
    </Loggers>

</Configuration>

app.war/WEB-INF/lib

commons-logging-1.1.3.jar
json-smart-1.1.1.jar
log4j-api-2.0-rc1.jar
log4j-core-2.0-rc1.jar
log4j-jcl-2.0-rc1.jar

Не могли бы вы сказать мне, что не так? Я попытался закомментировать параметр контекста в web.xml и положиться на автоконфигурацию, но изменений нет.

РЕДАКТИРОВАТЬ

когда я добавил следующий код

<context-param>
    <param-name>log4jContextName</param-name>
    <param-value>oauthDemo</param-value>
</context-param>

это не удалось по-другому (у меня нет времени исследовать сейчас)

07:41:29,269 INFO  [io.undertow.servlet] (MSC service thread 1-12) Log4jServletContainerInitializer starting up Log4j in Servlet 3.0+ environment.
07:41:29,644 INFO  [stdout] (MSC service thread 1-12) 2014-02-20 07:41:29,643 ERROR FileManager (c:/oauth2.log) java.io.FileNotFoundException: c:\oauth2.log (Přístup byl odepřen)
07:41:29,646 INFO  [stdout] (MSC service thread 1-12) 2014-02-20 07:41:29,645 ERROR Unable to invoke method createAppender in class org.apache.logging.log4j.core.appender.FileAppender for element File 07:41:29,647 INFO    [stdout] (MSC service thread 1-12)    at org.apache.logging.log4j.core.config.BaseConfiguration.createPluginObject(BaseConfiguration.java:913)

person Leos Literak    schedule 20.02.2014    source источник
comment
Используйте правильный context-param. Должно быть log4jConfiguration вместо log4jConfigLocation. См. logging.apache.org/log4j/2.x. /manual/webapp.html#Servlet-3.0.   -  person M. Deinum    schedule 20.02.2014
comment
log4jConfiguration: невозможно получить доступ к /WEB-INF/classes/log4j2.xml java.lang.IllegalArgumentException: URI не является абсолютным. log4jConfigLocation может читать конфигурацию из war. Когда я изменил местоположение журнала, произошел сбой с некоторой синтаксической ошибкой.   -  person Leos Literak    schedule 20.02.2014
comment
Я попытался полностью положиться на автоконфигурацию, поэтому закомментировал материал LOG4J в web.xml. Конфигурация работает, но предупреждение по-прежнему отображается. Конфигурация контекста Log4j не предоставлена. Это очень необычно :-(   -  person Leos Literak    schedule 21.02.2014


Ответы (2)


В качестве справки на этой странице описывается, как настроить Log4j2:

https://logging.apache.org/log4j/2.x/manual/webapp.html#ContextParams

В моем случае я не настроил параметры контекста в web.xml. Единственное, что мне нужно было сделать, это установить отображаемое имя:

<display-name>My Admin API</display-name>

Я также использую log4j2.yaml вместо файлов xml, и файл не находится внутри войны. Также обратите внимание, что на этой странице https://logging.apache.org/log4j/2.x/manual/webapp.html говорят проблема с версиями Tomcat ‹ 7.0.43. Поэтому либо вам нужно использовать более новую версию, либо выполнить определенную конфигурацию.

person Constantino Cronemberger    schedule 25.05.2015
comment
Для меня это также было исправлено добавлением отображаемого имени. - person jansohn; 10.07.2015

Log4J будет искать файл конфигурации log4j2.xml в пути к классам, если не указано местоположение. Пробовали ли вы не указывать местоположение файла log4j2.xml (то есть удалить context-param материал из web.xml), а просто полагаться на размещение конфигурации в пути к классам? (app.war/WEB-INF/classes/log4j2.xml выглядит хорошо для меня)

Обратите внимание, что файл должен называться log4j2.xml, а не log4j.xml.

person Remko Popma    schedule 21.02.2014
comment
Да, я сделал. Я удалил все параметры из web.xml, и это все равно не сработало. Я попробовал log4j2 Logger, и этот сработал, поэтому я понял, что проблема заключается в интеграции библиотеки Commons. Я отправил дефект: issues.apache.org/jira/browse/LOG4J2-546 с самым маленьким приложением, где я могу воспроизвести проблему. - person Leos Literak; 21.02.2014