Программное конфигурирование Log4j логгеров в Java
Быстрый ответ
Для программной настройки Log4j2 логгеров используйте LoggerContext. С помощью него возможно управлять конфигурацией логирования. Следующий код позволяет создать логгер с ConsoleAppender и PatternLayout:
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
ConfigurationBuilder<BuiltConfiguration> builder = Configurator.newConfigurationBuilder();
builder.add(builder.newAppender("stdout", "Console")
.add(builder.newLayout("PatternLayout")
.addAttribute("pattern", "%d{HH:mm:ss.SSS} %-5level – %msg%n")));
builder.add(builder.newLogger("MyLogger", Level.DEBUG)
.add(builder.newAppenderRef("stdout"))
.addAttribute("additivity", false));
Configurator.initialize(builder.build());
Этот пример кода создаёт ConsoleAppender, отображающий время в логах, и инициализирует логгер под именем MyLogger
на уровне DEBUG.
Новая эра: Программное конфигурирование логгеров
Подготовка: Ранняя инициализация
Произведите настройку логгера в методе init()
, что позволит его использовать на ранних стадиях жизненного цикла приложения:
public class LoggingConfigurer {
static {
init();
}
public static void init() {
// Код для программной конфигурации
}
}
Интегральный подход: Управление через корневой логгер
Корневой логгер предоставляет управление логированием на протяжении всего приложения:
LoggerContext context = (LoggerContext) LogManager.getContext(false);
Configuration config = context.getConfiguration();
config.getAppender("stdout").stop();
config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).removeAppender("stdout");
context.updateLoggers(config); // Применение изменений
Особенности каждого класса: Логгер для отдельных классов
Используйте возможности объектно-ориентированного программирования для организации логирования конкретных классов:
LoggerConfig loggerConfig = config.getLoggerConfig("com.example.MyClass");
loggerConfig.setLevel(Level.INFO);
context.updateLoggers();
В кои веки веков: Динамическое обновление логгеров
Настройки логирования могут быть легко изменены в процессе работы приложения. Помните, что перемены являются единственной неизменной вещью.
Визуализация
Настройку логгеров Log4j можно представить в виде инструментария для проекта.
🧰 Набор инструментов Log4j:
- Гаечный ключ 🔧:
RootLogger
(регулирование основных параметров) - Отвертки 🪛:
Appenders
(управление направлением логов) - Молоток 🔨:
Log Levels
(определение уровня логирования) - Рулетка 📏:
Layouts
(форматирование сообщений логов)
При некорректной настройке: 🧰 = [🔧🔨🪛📏] Результат: Хаос и ошибки. 🏚️
С помощью программной конфигурации Log4j: 🧰 = [🔧🪛🔨📏] Результат: Организованное и надёжное логирование. 🏢
Программная конфигурация предоставит вам необходимый инструментарий в любой момент!
Примеры кода для применения на практике
Комфортное использование: Применяйте SLF4J
С помощью SLF4J и Log4j2 можно создать удобную абстракцию и скрыть сложные детали:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SomeComponent {
private static final Logger LOGGER = LoggerFactory.getLogger(SomeComponent.class);
}
Отложенное создание: Ленивая инициализация логгеров
Используйте ленивую инициализацию для создания логгера:
public class LazyLoggerProvider {
private static Logger LOGGER = null;
public static Logger getLogger() {
if (LOGGER == null) {
LOGGER = LoggerFactory.getLogger(LazyLoggerProvider.class);
}
return LOGGER;
}
}
Управление выводом: Настройка Appender
Установите вывод консольного аппендера на System.out
подобно тому, как пастух направляет своё стадо:
Appender consoleAppender = ...
consoleAppender.setTarget(ConsoleAppender.Target.SYSTEM_OUT);
consoleAppender.start();
rootLogger.addAppender(consoleAppender);
Искусство уравновешивания: Управление пороговыми значениями
Настройте пороги для аппендеров, распределяя таким образом логи по уровням:
Appender debugAppender = ...
Appender errorAppender = ...
debugAppender.setThreshold(Level.DEBUG);
errorAppender.setThreshold(Level.ERROR);
// Добавление аппендеров
Полезные материалы
- Log4j – Конфигурирование Log4j 2 — детальная информация о программных конфигурациях для Log4j.
- java – Программное изменение уровня логирования в Log4j2 – Stack Overflow — обсуждения и решения, позволяющие на лету изменять уровни логирования.
- Log4j – Конфигурирование Log4j 2 — официальное руководство Log4j.
- Log4j – Конфигурирование Log4j 2 — руководство по использованию конструкторов в Log4j.
- Конфигурация Log4j2 с Spring Boot – Baeldung — пошаговая инструкция по интеграции Log4j2 и Spring Boot.