Async Logger — это мод для Minecraft, который делает операции логирования асинхронными.
В ванильной версии логгеры не являются асинхронными. Это означает, что фактические операции логирования, включая операции ввода-вывода, выполняются в потоке логирования. Данный мод изменяет логирование на асинхронное для повышения производительности.
Это может быть особенно полезно, когда регистрируется большое количество сообщений и/или включено отладочное логирование (по умолчанию на Forge / NeoForge).
Тесты производительности
| Элемент | Ванильная версия | AsyncLogger |
|---|---|---|
| Простые сообщения (10 тыс.) | 6146,1 мс | 141,2 мс |
| Сообщения с плейсхолдерами (10 тыс.) | 6413,2 мс | 96,6 мс |
| Сообщения с Throwable (1,5 тыс.) | 19572,4 мс | 9,0 мс |
Вы можете провести эти тесты самостоятельно, включив опцию testPerformance в конфиге. Когда эта опция включена, мод будет регистрировать большое количество сообщений как до, так и после настройки асинхронных логгеров. Результаты теста вы можете увидеть в логе.
Фильтрация
Начиная с версии 2.0.0, AsyncLogger поддерживает фильтрацию логов. Фильтрация выполняется в выделенном асинхронном потоке логгера, что гарантирует отсутствие накладных расходов для вызывающего потока.
Для использования просто установите filtering.enabled в значение true в конфиге и отредактируйте один или несколько фильтров. Поддерживается фильтрация по имени логгера, уровню и сообщению (совпадение подстроки или регулярные выражения).
Технические детали
- Используются асинхронные логгеры, а не асинхронные appender'ы. Первые являются более новыми, быстрыми и менее затратными по выделению памяти.
- Асинхронные логгеры требуют LMAX Disruptor — библиотеку для безблокировочной межпоточной коммуникации. Мод загружает библиотеку в системный classloader, если она отсутствует. Данный мод распространяет LMAX Disruptor под лицензией Apache-2.0 License.
- Файл конфигурации позволяет легко управлять некоторыми настройками log4j2.
System.outиSystem.errмогут быть перенаправлены в логгеры.