Ответ 1
Причины обновления с Log4j 1.x до Log4j 2
- Поддержка сообщества: Log4j 1.x не активно поддерживается, в то время как Log4j 2 имеет активное сообщество, на котором заданы вопросы, добавлены функции и исправлены ошибки. Обновление: с августа 2015 года Log4j 1.x официально заканчивается. и рекомендуется обновить до Log4j 2. Обновить 2: Log4j 1.2 нарушен в Java 9.
- Async Loggers - производительность аналогична отключению ведения журнала.
- Пользовательские уровни журналов
- Автоматически перезагружать свою конфигурацию после изменения без потери событий журнала при реконфигурации.
- Java 8-стиль поддержка лямбда для ленивого ведения журнала
- Log4j 2 без мусора (или, по крайней мере, с низким уровнем мусора) с версии 2.6
- Фильтрация: фильтрация на основе контекстных данных, маркеров, регулярных выражений и других компонентов в журнале событий. Фильтры могут быть связаны с регистраторами. Вы можете использовать общий класс фильтра в любом из этих условий.
- Архитектура плагина - легко расширить путем создания пользовательских компонентов
- Поддерживаемые API: SLF4J, Commons Logging, Log4j-1.x и java.util.logging
- Log4j 2 API отдельно от реализации Log4j 2. API поддерживает больше, чем просто протоколирование строк: CharSequences, Objects и custom Messages. Сообщения позволяют поддерживать интересные и сложные конструкции, проходящие через систему протоколирования, и эффективно манипулировать ими. Пользователи могут создавать свои собственные типы сообщений и писать собственные макеты, фильтры и поисковые запросы, чтобы манипулировать ими.
- Concurrency улучшения: log4j2 использует библиотеки java.util.concurrent для выполнения блокировки на самом низком уровне. Log4j-1.x имеет проблемы с блокировкой.
- Конфигурация через XML, JSON, YAML, файлы конфигурации свойств или программно.
Знать
- log4j2.xml и log4j2.properties отличаются от синтаксиса конфигурации Log4j 1.2
- Log4j 2 не полностью совместим с Log4j 1.x: API Log4j 1.2 поддерживается адаптером
log4j-1.2-api
, но настройки, основанные на внутренних компонентах Log4j 1.2, могут не работа. - Java 6 требуется для версий от версии 2.0 до 2.3. Java 7 требуется для Log4j 2.4 и более поздних версий.
Советы при обновлении
Общие проблемы, возникающие у людей при запуске с log4j2:
- Вам нужно (как минимум) и log4j-api-2.6.2.jar, и log4j-core-2.6.2.jar в вашем пути к классам
- Log4j2 ищет файл конфигурации log4j 2.xml, а не файл конфигурации log4j.xml
- Файл конфигурации location: либо поместите его в путь к классам, либо укажите его путь с системным свойством
log4j.configurationFile
- Чтобы отладить конфигурацию, используйте
<Configuration status="trace">
в начале вашего файла конфигурации - Я бы посоветовал начать с одной из многих конфигураций образцов, представленных в руководстве log4j2, а затем добавить несколько колоколов и свистов по частям.
Если ваша проблема не является одной из вышеперечисленных, пожалуйста, покажите свою конфигурацию и укажите более подробную информацию о том, какую проблему вы испытываете. (Не уверен, что вы ожидаете от автоматической настройки, это очень простая функция, которая регистрирует события ERROR на консоли, если log4j2 не может найти файл конфигурации. Это редко бывает достаточно.)
Чтобы записать в домашний каталог, вы можете использовать системное свойство lookup ${sys:PROPERTYNAME}
. Ниже приведен пример конфигурации для демонстрации:
<Configuration status="trace">
<Properties>
<Property name="logfile">${sys:user.home}/log${date:yyyyMMdd}.log</Property>
</Properties>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n"/>
</Console>
<File name="FILE" fileName="${sys:logfile}">
<PatternLayout>
<pattern>%d %p [%t] %c{1.} %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="STDOUT" level="ERROR" />
<AppenderRef ref="FILE" />
</Root>
</Loggers>
</Configuration>