Недавно я решил научиться пользоваться логгером log4j2. Я загрузил необходимые файлы 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.
Ответы:
Это простой Java-проект eclipse без maven и т. Д.? В этом случае вам нужно будет поместить
log4j2.xml
файл вsrc
папку, чтобы можно было найти его в пути к классам. Если вы используете maven, поместите его подsrc/main/resources
илиsrc/test/resources
источник
sbt
log4j2.xml
src/main/resources
Вам нужно выбрать одно из следующих решений:
источник
-Dlog4j.configurationFile
это то, что мне нужно, поскольку проект, над которым я работаю, не основан на Maven. ПотрясающеСледовал документации - 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
:Добавление сопоставления зависимостей для
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 . Например, для версии log4j-api 2.8.1 перейдите по этой ссылке и найдите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); }
источник
В дополнение к тому, что написал Томаш В., запустив свое приложение, вы можете использовать настройки:
для решения большинства проблем с настройкой.
Подробнее см. Часто задаваемые вопросы о Log4j2: как отладить конфигурацию?
источник
Eclipse никогда не увидит файл, пока вы не обновите IDE принудительно. Это особенность! Таким образом, вы можете поместить файл по всему проекту, и Eclipse полностью его проигнорирует и выдаст эти ошибки. Нажмите «Обновить» в представлении проекта Eclipse, и тогда все заработает.
источник
В моем случае мне пришлось поместить его в папку bin моего проекта, даже несмотря на то, что мой путь к классам установлен в папку src. Понятия не имею, почему, но попробовать стоит.
источник