«1. Обзор

Этот туториал покажет идею и примеры регистрации информации о потоках с использованием библиотеки Log4j2.

2. Ведение журналов и потоки

Журналы — это мощный инструмент для предоставления контекста о том, что происходило в системе, когда происходила какая-то ошибка или поток. Ведение журнала помогает нам собирать и сохранять релевантную информацию для анализа в любое время.

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

Многие Java-приложения используют журналирование и потоки для управления своим процессом в этом сценарии. Однако, поскольку журналы обычно сосредоточены на конкретном файле, журналы путаются из разных потоков, и пользователь не может определить и понять последовательность событий. Мы будем использовать одну из самых популярных сред ведения журналов Java, Log4j2, чтобы показать соответствующую информацию о нашем потоке для решения этой проблемы.

3. Использование Log4j2

Далее у нас есть пример использования некоторых параметров в Log4j2 для отображения информации о нашем потоке:

<Property name="LOG_PATTERN"> %d{yyyy-MM-dd HH:mm:ss.SSS} --- thread_id="%tid" thread_name="%tn" thread_priority="%tp" --- [%p] %m%n </Property>

Log4j2 использует параметры в своем шаблоне для ссылки на данные. Все параметры начинаются с % в начале. Вот несколько примеров параметров потока:

    tid: Идентификатор потока — положительное длинное число, сгенерированное при создании потока. tn: это последовательность символов, обозначающая поток. tp: приоритет потока — это целое число от 1 до 10, где более значащие числа означают более высокий приоритет.

Во-первых, как предполагается, мы добавляем информацию об идентификаторе, имени и приоритете нашего потока. Поэтому, чтобы визуализировать это, нам нужно создать простое приложение, которое создает новые потоки и регистрирует некоторую информацию:

public class Log4j2ThreadInfo{
    private static final Logger logger = LogManager.getLogger(Log4j2ThreadInfo.class);
    
    public static void main(String[] args) {
        IntStream.range(0, 5).forEach(i -> {
            Runnable runnable = () -> logger.info("Logging info");
            Thread thread = new Thread(runnable);
            thread.start();
        });
    }
}

Другими словами, мы просто запускаем forEach в диапазоне от 0 до 5 с помощью Java. Потоки, а затем запуск нового потока с некоторым ведением журнала. В результате мы получим:

2022-01-14 23:44:56.893 --- thread_id="22" thread_name="Thread-2" thread_priority="5" --- [INFO] Logging info
2022-01-14 23:44:56.893 --- thread_id="21" thread_name="Thread-1" thread_priority="5" --- [INFO] Logging info
2022-01-14 23:44:56.893 --- thread_id="20" thread_name="Thread-0" thread_priority="5" --- [INFO] Logging info
2022-01-14 23:44:56.893 --- thread_id="24" thread_name="Thread-4" thread_priority="5" --- [INFO] Logging info
2022-01-14 23:44:56.893 --- thread_id="23" thread_name="Thread-3" thread_priority="5" --- [INFO] Logging info

4. Заключение

В этой статье показан простой способ добавления информации о потоке в ваш Java-проект с использованием параметров Log4j2. Если вы хотите проверить код, он доступен на GitHub.