Подтвердить что ты не робот

Ведение журнала Spring с использованием Log4j2

Я пытаюсь использовать Log4j2 для печати журналов spring в файл и консоль. Я думаю, это проблема в моей конфигурации Log4j2. Я не смог заставить его работать. У меня есть эта конфигурация в файле log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration name="defaultConfiguration" status="warn" strict="true" monitorInterval="5">
    <properties>
        <property name="patternlayout">%d{ISO8601} [%t] %-5level %logger{36} - %msg%n%throwable{full}</property>
        <property name="filename">${env:MY_ROOT}/logs/mylog.log</property>
        <property name="filenamePattern">${env:MY_ROOT}/logs/mylog-%d{yyyy-dd-MM}-%i.log.gz</property>
    </properties>
    <appenders>
        <appender name="Console" type="Console" target="SYSTEM_OUT">
            <layout type="PatternLayout" pattern="${patternlayout}" />
        </appender>
        <appender name="File" type="RollingFile" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true"
        append="true">
            <layout type="PatternLayout" pattern="${patternlayout}" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="50 MB" />
            </Policies>
            <DefaultRolloverStrategy max="30" />
        </appender>
        <appender name="AsynchFile" type="asynch" blocking="true" bufferSize="128">
            <appender-ref ref="File" />
        </appender>
    </appenders>
    <loggers>
        <root level="info">
            <appender-ref ref="Console" />
            <appender-ref ref="AsynchFile" />
        </root>
        <logger name="org.springframework.beans">
            <appender-ref ref="Console" />
            <appender-ref ref="AsynchFile" />
        </logger>
    </loggers>
</configuration>

Это зависимости, которые у меня есть в моем файле pom: (возможно, некоторые из них не требуются)

<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-api</artifactId>
 <version>1.6.6</version>
</dependency>

<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-log4j12</artifactId>
 <version>1.6.6</version>
</dependency>

<dependency>
 <groupId>org.apache.logging.log4j</groupId>
 <artifactId>log4j-api</artifactId>
 <version>2.0-beta5</version>
</dependency>

<dependency>
 <groupId>org.apache.logging.log4j</groupId>
 <artifactId>log4j-core</artifactId>
 <version>2.0-beta5</version>
</dependency>
<dependency>
 <groupId>org.apache.logging.log4j</groupId>
 <artifactId>log4j-1.2-api</artifactId>
 <version>2.0-beta5</version>
</dependency>

<dependency>
 <groupId>com.lmax</groupId>
 <artifactId>disruptor</artifactId>
 <version>3.0.0.beta3</version>
</dependency>

Я не делаю ничего связанного с spring в своем Java-коде. Я использую класс Main из Apache Camel, который читает мою конфигурацию spring и загружает beans.

Что я делаю неправильно? Спасибо!

Изменить: я не получаю журналы spring на любом выходе (консоли или файле). Тем не менее, я могу получить журналы, которые я создаю в своем java-коде. Надеюсь, это разъяснение поможет.

4b9b3361

Ответ 1

Глядя на зависимости у вашего пом, у вас есть это: slf4j-log4j12. Это приводит к тому, что инструкции log против slf4j api перенаправляются на реализацию Log4j-1.2. Вероятно, вы хотите, чтобы они были перенаправлены на реализацию Log4j-2.0. Можете ли вы заменить slf4j-log4j12 на log4j-slf4j-impl и повторить попытку?

Ответ 2

Эта проблема вызвана spring использованием common-logging 1.X, поэтому, если вы хотите, чтобы этот журнал был маршрутизирован в Log4j 2, вам нужно добавить зависимости в свой pom.xml

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>2.1</version>
 </dependency>

не удалять ваши общие записи 1.X-зависимостей