«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.