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

Файл конфигурации log4j2 не найден. Использование конфигурации по умолчанию: запись только ошибок на консоль

$ java -Dlog4j.configuration=file:///path/to/your/log4j2.xml -jar /path/to/your/jar_file.jar

Написанный на консоль, вы получаете

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

Но также выглядит, что файл конфигурации найден и не разбирается:

    log4j:WARN Continuable parsing error 2 and column 31
    log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
    log4j:WARN Continuable parsing error 2 and column 31
    log4j:WARN Document is invalid: no grammar found.
    log4j:ERROR DOM element is - not a <log4j:configuration> element.
    log4j:WARN No appenders could be found for logger (kafka.utils.VerifiableProperties).
    log4j:WARN Please initialize the log4j system properly.
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
4b9b3361

Ответ 1

Я занимаюсь этой проблемой некоторое время. Я изменил все, как описано в этой статье, и даже произошла ошибка. В этом случае убедитесь, что вы очищаете проект при изменении настроек в файле .xml или .properties. В среде затмения. Выберите "Проект" → "Очистить"

Ответ 2

Проблема 1

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

Решение 1

Чтобы работать с версией 2 log4j aka "log4j2"

-Dlog4j.configuration=

должен читать

-Dlog4j.configurationFile=

Проблема 2

log4j:WARN ....

Решение 2

В вашем проекте не включайте банку log4j-1.2 и вместо этого включите log4j-1.2-api-2.1.jar. Я не был уверен, как точно исключить log4j 1.2. Я знал, что от этого зависит мой проект. Итак, с некоторым чтением я исключил кучу вещей.

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.10</artifactId>
    <version>0.8.2.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>                
        </exclusion>
        <exclusion>
            <groupId>org.apache.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>          
    </exclusions>
</dependency>

Я не уверен, какой из исключений сделал трюк. Отдельно я включил зависимость от 1.2 api, которая соединяется с 2.x.

<!--
    http://logging.apache.org/log4j/2.0/manual/migration.html
    http://logging.apache.org/log4j/2.0/maven-artifacts.html
    Log4j 1.x API Bridge
    If existing components use Log4j 1.x and you want to have this logging
    routed to Log4j 2, then remove any log4j 1.x dependencies and add the
    following.
-->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.2</version>
</dependency>

Теперь 1,2 журнала, которые только собирались на консоль, фактически перешли к нашим 2.x-приложениям.

Ответ 3

Если у вас нет состояния log4j-1.2.jar на вашем пути к классам, как Ренко указывает в своем комментарии, вы увидите только сообщение, файл конфигурации log4j2 не найден.

Это проблема, если в вашем файле конфигурации есть ошибка, так как вам не сообщат, в чем заключается проблема при запуске.

Например, если у вас есть файл log4j2.yaml, который log4j2 не может обработать, потому что, например, вы не настроили парсер YAML для вашего проекта, или ваша конфигурация просто неверна. Вы увидите сообщение об отсутствии файла конфигурации log4j2 без дополнительной информации. Это имеет место, даже если у вас есть действительный файл log4j2.xml, так как log4j2 будет пытаться обработать только первый найденный файл конфигурации.

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

-Dlog4j.configurationFile=

Надеюсь, это поможет вам точно определить, действительно ли проблема вызвана тем, что ваш загрузчик классов не нашел файл конфигурации log4j2 или что-то еще в вашей конфигурации.

Обновить

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

-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=<level>

Ответ 4

Я использую Hive JDBC в проекте Java Maven и у меня такие же проблемы.

Мой метод заключается в добавлении файла log4j2.xml в src/main/java/resources

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyClassName {
    private static final Logger LOG = LoggerFactory.getLogger(MyClassName.class);
}

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="<your_package_name>.<your_class_name>" level="debug">
        <AppenderRef ref="Console"/>
        </Logger>
        <Root level="WARN">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

Ответ 5

У меня была та же проблема, но я заметил, что у меня нет log4j2.xml в моем проекте после прочтения в сети об этой проблеме, поэтому я скопировал соответствующий код в блокнот и возвратил файл блокнота в xml и добавил в свой проект под папка ресурсов. меня устраивает.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
  <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="DEBUG">
  <AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

Ответ 6

Я получаю эту ошибку, потому что файл log4j2 был удален из моей папки src

Просто добавьте XML файл в папку src

<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
    </Console>

    <RollingFile name="RollingFile" filename="logs/B2CATA-hybrid.log"
        filepattern="${logPath}/%d{yyyyMMddHHmmss}-fargo.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
        <Policies>
            <SizeBasedTriggeringPolicy size="100 MB" />
        </Policies>
        <DefaultRolloverStrategy max="20" />
    </RollingFile>

</Appenders>
<Loggers>
   <Logger name="com.pragiti." level="trace" />
    <Root level="info">
        <AppenderRef ref="Console" />
        <AppenderRef ref="RollingFile" />
    </Root>
</Loggers>

Ответ 7

В моем случае я использую файл log4j2 Json log4j2.json в пути к классам моего проекта gradle, и я получил ту же ошибку.

Решением здесь было добавить зависимость для обработки JSON к моим зависимостям gradle.

compile group:"com.fasterxml.jackson.core", name:"jackson-core", version:'2.8.4'
compile group:"com.fasterxml.jackson.core", name:"jackson-databind", version:'2.8.4'
compile group:"com.fasterxml.jackson.core", name:"jackson-annotations", version:'2.8.4'

См. также документация log4j2:

Поддержка JSON использует процессор данных Jackson для анализа JSON файлы. Эти зависимости должны быть добавлены к проекту, который хочет использовать JSON для конфигурации:

Ответ 8

Вещи, которые я проверяю, чтобы проверить регистрацию,

1) Убедитесь, что нет версий oder log4j.

mvn dependency:tree | grep log ## ./gradlew dependencies | grep log
[INFO] +- com.prayagupd:log-service:jar:1.0:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.6.2:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.6.2:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile

2) убедитесь, что я правильно настраиваю log4j2.json, что делается с помощью -Dlog4j.configurationFile =???

val logConfig: PropertiesConfiguration = new PropertiesConfiguration("application.properties")
System.setProperty("log4j.configurationFile", logConfig.getString("log4j.config.file"))

println("log4j.configurationFile :: " + System.getProperty("log4j.configurationFile"))

или же

Configurator.initialize(null, logConfig.getString("log4j.config.file"));

Также, если происходит автоматическое обнаружение, убедитесь, что имя файла - log4j2. * Не log4j. *

3) Еще одна проверка для парсера для log4j2.json. Спасибо команде log4j за то, что она не предоставила парсер внутри API.

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.0</version>
</dependency>

Это может вызвать исключение, если не удается найти анализатор json

[Fatal Error] log4j2.json:1:1: Content is not allowed in prolog.

Ответ 9

Я решил эту проблему, настроив путь сборки. Вот шаги, которые я выполнил: В затмении.

  • создайте папку и сохраните файл logj4 в ней.
  • Назовите щелчок в созданной папке и перейдите в "Путь сборки".
  • Нажмите "Добавить папку"
  • Выберите созданную папку.
  • Нажмите "ОК" и "Применить и закрыть".

Теперь вы можете запустить

Ответ 10

Убедитесь, что вы поместили файл log4j2.* Вместо файла log4j.* папку .../src/main/resources.

Ответ 11

Иногда это может быть сгенерировано до фактического файла конфигурации log4j2, найденного в веб-сервлете. по крайней мере, для моего случая я так думаю. Потому что у меня уже есть в моем web.xml

  <context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>classpath:log4j2-app.xml</param-value>
  </context-param>

и проверка источника log4j-web; в классе

org.apache.logging.log4j.web.Log4jWebInitializerImpl

есть линия;

String location = this.substitutor
                 .replace(this.servletContext.getInitParameter("log4jConfiguration"));

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