Настройка веб-приложения LOG4J 2 с помощью xi: include - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь установить log4j 2 в веб-приложении.Я добавляю в свой web.xml эти строки

<context-param>
    <param-name>isLog4jAutoInitializationDisabled</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>isLog4jContextSelectorNamed</param-name>
    <param-value>false</param-value>
</context-param>

<listener><listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class></listener>

и

<filter><filter-name>log4jServletFilter</filter-name><filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class></filter><filter-mapping><filter-name>log4jServletFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher><dispatcher>ERROR</dispatcher><dispatcher>ASYNC</dispatcher></filter-mapping>

, как указано здесь https://logging.apache.org/log4j/2.x/manual/webapp.html

У меня установлено отображаемое имя

<display-name>MYAPP</display-name>

в web.xml

, и я в

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">

.

Я включаю в свой WEB-INF этот log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" strict="true" monitorInterval="30" xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:include href="${application.conf.dir}/MYAPP/log4j2.xml"/>
</Configuration>

Файл в $ {application.conf.dir} /MYAPP/log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>

<Appenders>
<RollingFile name="A3_MYAPP" fileName="${sys:application.log.dir}/MYAPP/MYAPP.log"
        filePattern="${sys:application.log.dir}/MYAPP/MYAPP_%d{yyyy-MM-dd}.%i.log.bz2">
    <PatternLayout>
        <Pattern>%d{yyyy/MM/dd HH:mm:ss,SSS} [%p] - %m%n</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="100 MB"/>
    </Policies>
    <DefaultRolloverStrategy fileIndex="nomax">
        <Delete basePath="${sys:application.log.dir}/MYAPP/">
            <IfAny>
                <IfAccumulatedFileSize exceeds="100 MB" />
                <IfLastModified age="30d" />
            </IfAny>>
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="MYAPP" additivity="false" level="debug">
    <AppenderRef ref="A3_MYAPP"/>
</Logger>
</Loggers>

При развертывании webapp я получаю эту ошибку:

07: 10: 54,792 ОШИБКА [stderr] (Пул потоков ServerService - 151) [Предупреждение] log4j2.xml: 5: 68: Не удалось включить операцию, возвращаясь к резервному.Ошибка чтения файла в формате XML (href = '$% 7Bapplication.conf.dir% 7D / MYAPP / log4j2.xml').Причина: C: \ wildfly-14.0.1.Final \ standalone \ tmp \ vfs \ temp \ temp96a1091798388092 \ content-1f986d8fa374ea35 \ WEB-INF \ $ {application.conf.dir} \ MYAPP \ log4j2.xml (Невозможно проделать ил percorso)specificato)

, поскольку в C: \ wildfly-14.0.1 нет файла .Final \ standalone \ tmp \ vfs \ temp \ temp96a1091798388092 \ content-1f986d8fa374ea35 \ WEB-INF \ $ {application.conf.dir}\ MYAPP \ log4j2.xml

Мне кажется, что в xi href замена системной переменной не производилась, она остается href = '$% 7Bapplication.conf.dir% 7D / MYAPP / log4j2.xml'

Я даже пытался написать

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" strict="true" monitorInterval="30" xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:include href="${sys:application.conf.dir}/MYAPP/log4j2.xml"/>
</Configuration>

, чтобы получить эту ошибку: 08: 39: 05,946 ОШИБКА [stderr] (Пул потоков ServerService - 93) [Неустранимая ошибка] log4j2.xml: 5:72: значение атрибута 'href' '$% 7Bsys: application.conf.dir% 7D / ADR_datex2 / log4j2.xml' синтаксически недопустимо.После применения экранирующих правил значение не является ни синтаксически правильным URI, ни IRI.

Поэтому мой вопрос: как я могу разрешить моему веб-приложению использовать внешний файл log4j2.xml с помощью модуля log4j-web, чтобы изменить его соответствующим образоммоим желаниям?Возможно ли это с помощью xi: include использовать замену системных свойств среды системы / java?

Заранее спасибо

ps это свойства системы java при запуске

Setting JAVA property to "C:\PROGRA~1\Java\JDK-11~1.2\\bin\java"
===============================================================================
JBoss Bootstrap Environment

JBOSS_HOME: "C:\wildfly-14.0.1.Final"

JAVA: "C:\PROGRA~1\Java\JDK-11~1.2\\bin\java"

JAVA_OPTS: "-Dprogram.name=standalone.bat  -server -Duser.timezone=America/Santiago -Duser.country=CL -Duser.language=en -Dlog4j.debug=true -Dapplication.conf.dir=/prd/tps/conf/-Djboss.userconf.dir=/prd/tps/conf/ -Dapplication.log.dir=/tmp/log/-Djboss.userlog.dir=/tmp/log/ -Dapplication.data.dir=/prd/tps/data/ --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED --add-modules=java.se"
===============================================================================
...