Конфигурация Log4j2 - Файл конфигурации log4j2 не найден
В последнее время я решил научиться использовать log4j2 logger. Я загрузил необходимые файлы jar, созданную библиотеку, файл конфигурации xml и попытался ее использовать. К сожалению, я получаю этот оператор в консоли (Eclipse):
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Это мой код класса тестирования:
package log4j.test;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Log4jTest
{
static final Logger logger = LogManager.getLogger(Logger.class.getName());
public static void main(String[] args) {
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
logger.fatal("fatal");
}
}
И мой файл конфигурации xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test"
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="log4j.test.Log4jTest" level="trace">
<AppenderRef ref="Console"/>
</Logger>
<Root level="trace">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Я также пытался использовать xml без тегов <Logger>
, а также спецификацию пакета и в разных каталогах папок/пакетов, но это не помогло. Теперь мой файл log4j2.xml
находится непосредственно в папке проекта в eclipse.
Ответы
Ответ 1
Это простой проект java-проекта eclipse без maven и т.д.? В этом случае вам нужно будет поместить файл log4j2.xml
в папку src
, чтобы найти его в пути к классам.
Если вы используете maven, поставьте его под src/main/resources
или src/test/resources
Ответ 2
Вам нужно выбрать одно из следующих решений:
- Поместите файл log4j2.xml в каталог ресурсов вашего проекта, чтобы log4j обнаружил файлы в пути к классам.
- Использовать системное свойство -Dlog4j.configurationFile = file:/path/to/file/log4j2.xml
Ответ 3
Следовало за документацией - Apache Log4j2 Configuratoin и Apache Log4j2 Maven при настройке log4j2 с yaml. В соответствии с документацией необходимы следующие зависимости maven:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.1</version>
</dependency>
и
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.8.6</version>
</dependency>
Просто добавив, что они не выбрали конфигурацию и всегда выдавали ошибку. Способ отладки конфигурации, добавив -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE
, помог увидеть журналы. Позже пришлось загружать источник с помощью Maven и отладки помогли понять зависимые классы log4j2. Они перечислены в org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory
:
com.fasterxml.jackson.databind.ObjectMapper
com.fasterxml.jackson.databind.JsonNode
com.fasterxml.jackson.core.JsonParser
com.fasterxml.jackson.dataformat.yaml.YAMLFactory
Добавление сопоставления зависимостей для jackson-dataformat-yaml
не будет иметь первых двух классов. Следовательно, добавьте зависимость jackson-databind
, чтобы получить работу конфигурации yaml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
</dependency>
Вы можете добавить версию, обратившись к разделу Test Dependencies
статьи log4j-api
из Репозиторий MVN. Например. для версии 2.8.1 log4j-api обратитесь к и найдите версию jackson-databind
.
Кроме того, вы можете использовать приведенный ниже код Java, чтобы проверить, доступны ли классы в пути к классам:
System.out.println(ClassLoader.getSystemResource("log4j2.yml")); //Check if file is available in CP
ClassLoader cl = Thread.currentThread().getContextClassLoader(); //Code as in log4j2 API. Version: 2.8.1
String [] classes = {"com.fasterxml.jackson.databind.ObjectMapper",
"com.fasterxml.jackson.databind.JsonNode",
"com.fasterxml.jackson.core.JsonParser",
"com.fasterxml.jackson.dataformat.yaml.YAMLFactory"};
for(String className : classes) {
cl.loadClass(className);
}
Ответ 4
Eclipse никогда не увидит файл, пока вы не активируете обновление среды IDE. Его особенность! Таким образом, вы можете поместить файл по всему проекту, и Eclipse полностью его проигнорирует и выбросит эти ошибки. Хит обновится в представлении проекта Eclipse, а затем он работает.
Ответ 5
В дополнение к тому, что написал Tomasz W, при запуске приложения вы можете использовать настройки:
-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE
чтобы получить большинство проблем с конфигурацией.
Подробнее см. FAQ по Log4j2: Как отладить мою конфигурацию?
Ответ 6
В моем случае я должен был поместить его в папку bin моего проекта, даже тот факт, что мой путь к классам установлен в папку src. Я понятия не имею, почему, но стоит попробовать.