Способ реализации буферизованного ввода-вывода с использованием log4j2
Есть ли способ реализовать файл appender с помощью log4j2
, который будет хранить журнал в памяти для определенного размера, и после этого он будет записывать журнал в файл (локальный / удаленный).
Есть ли способ добиться этого?
В документации log4j2:FastFileAppender
похоже на стандарт FileAppender
за исключением того, что он всегда находится в буфере (это не может быть отключено) и внутренне использует ByteBuffer + RandomAccessFile
вместо BufferedOutputStream
, Мы увидели улучшение производительности на 20-200% по сравнению с FileAppender с "bufferedIO=true
"
bufferedIO:(логическое значение) Когда true - значение по умолчанию, записи будут записываться в буфер, а данные будут записываться на диск, когда буфер заполнен, или, если InstantFlush установлен, когда запись записывается. Блокировка файла не может быть использована с bufferedIO. Тесты производительности показали, что использование буферизованного ввода-вывода значительно повышает производительность, даже если включена немедленная очистка.
instantFlush:(логическое значение) Если задано значение true - по умолчанию после каждой записи будет выполняться сброс. Это гарантирует, что данные будут записаны на диск, но могут повлиять на производительность. Промывка после каждой записи полезна только при использовании этого приложения с синхронными регистраторами. Асинхронные регистраторы и добавщики будут автоматически сбрасываться в конце пакета событий, даже если для InstantFlush задано значение false. Это также гарантирует, что данные записываются на диск, но более эффективно.
Используя вышеуказанные атрибуты, мы можем контролировать запись данных в файл, но я не нашел способа сохранить журнал в памяти, а затем записать его после достижения определенного размера буфера.
Обновление: добавлен запрос новой функции в LOG4J2-jira-project: LOG4J2-401.
1 ответ
Начиная с последней бета-версии (бета-9, которая будет выпущена через несколько дней), пользователи не могут контролировать размер буфера для FileAppender или RandomAccessFileAppender. (FastFileAppender был переименован в RandomAccessFileAppender в бета-9.)
К вашему сведению, размер буфера FileAppender составляет 8192 байта, для RandomAccessFileAppender размер буфера составляет 262 144 байта.
Если вам необходимо контролировать размер буфера, отправьте запрос на функцию в трекере проблем log4j2 или в списке рассылки пользователя.
Обновление: LOG4J2-401 был исправлен в RC1. Начиная с RC2, размер буфера также настраивается для RollingRandomAccessFileAppender и RollingFileAppender.