Программное конфигурирование Log4j логгеров в Java

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для программной настройки Log4j2 логгеров используйте LoggerContext. С помощью него возможно управлять конфигурацией логирования. Следующий код позволяет создать логгер с ConsoleAppender и PatternLayout:

Java
Скопировать код
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.

Кинга Идем в IT: пошаговый план для смены профессии

Новая эра: Программное конфигурирование логгеров

Подготовка: Ранняя инициализация

Произведите настройку логгера в методе init(), что позволит его использовать на ранних стадиях жизненного цикла приложения:

Java
Скопировать код
public class LoggingConfigurer {
    static {
        init();
    }

    public static void init() {
        // Код для программной конфигурации
    }
}

Интегральный подход: Управление через корневой логгер

Корневой логгер предоставляет управление логированием на протяжении всего приложения:

Java
Скопировать код
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); // Применение изменений

Особенности каждого класса: Логгер для отдельных классов

Используйте возможности объектно-ориентированного программирования для организации логирования конкретных классов:

Java
Скопировать код
LoggerConfig loggerConfig = config.getLoggerConfig("com.example.MyClass");
loggerConfig.setLevel(Level.INFO);

context.updateLoggers();

В кои веки веков: Динамическое обновление логгеров

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

Визуализация

Настройку логгеров Log4j можно представить в виде инструментария для проекта.

🧰 Набор инструментов Log4j:

  • Гаечный ключ 🔧: RootLogger (регулирование основных параметров)
  • Отвертки 🪛: Appenders (управление направлением логов)
  • Молоток 🔨: Log Levels (определение уровня логирования)
  • Рулетка 📏: Layouts (форматирование сообщений логов)

При некорректной настройке: 🧰 = [🔧🔨🪛📏] Результат: Хаос и ошибки. 🏚️

С помощью программной конфигурации Log4j: 🧰 = [🔧🪛🔨📏] Результат: Организованное и надёжное логирование. 🏢

Программная конфигурация предоставит вам необходимый инструментарий в любой момент!

Примеры кода для применения на практике

Комфортное использование: Применяйте SLF4J

С помощью SLF4J и Log4j2 можно создать удобную абстракцию и скрыть сложные детали:

Java
Скопировать код
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SomeComponent {
    private static final Logger LOGGER = LoggerFactory.getLogger(SomeComponent.class);
}

Отложенное создание: Ленивая инициализация логгеров

Используйте ленивую инициализацию для создания логгера:

Java
Скопировать код
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 подобно тому, как пастух направляет своё стадо:

Java
Скопировать код
Appender consoleAppender = ...
consoleAppender.setTarget(ConsoleAppender.Target.SYSTEM_OUT);
consoleAppender.start();

rootLogger.addAppender(consoleAppender);

Искусство уравновешивания: Управление пороговыми значениями

Настройте пороги для аппендеров, распределяя таким образом логи по уровням:

Java
Скопировать код
Appender debugAppender = ...
Appender errorAppender = ...

debugAppender.setThreshold(Level.DEBUG);
errorAppender.setThreshold(Level.ERROR);

// Добавление аппендеров

Полезные материалы

  1. Log4j – Конфигурирование Log4j 2 — детальная информация о программных конфигурациях для Log4j.
  2. java – Программное изменение уровня логирования в Log4j2 – Stack Overflow — обсуждения и решения, позволяющие на лету изменять уровни логирования.
  3. Log4j – Конфигурирование Log4j 2 — официальное руководство Log4j.
  4. Log4j – Конфигурирование Log4j 2 — руководство по использованию конструкторов в Log4j.
  5. Конфигурация Log4j2 с Spring Boot – Baeldung — пошаговая инструкция по интеграции Log4j2 и Spring Boot.