Log4J: невозможно изменить bufferSize с bufferedIO = true в FileAppender - PullRequest
4 голосов
/ 18 апреля 2011

Я думаю, что столкнулся с проблемой при использовании log4j.Я пытаюсь включить bufferedio, но размер буфера по умолчанию 8 КБ слишком велик для моих текущих потребностей

<appender name="MyAppender" class="org.apache.log4j.FileAppender">
    <param name="bufferedIO" value="true"/>
    <param name="bufferSize" value="512"/>
    <param name="Append" value="true"/>
    <param name="File" value="C:/MyMonitor.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{dd/MM/yyyy HH:mm:ss}|%m%n"/>
    </layout>
</appender>

<logger name="com.mypackage.MyMonitor">
    <level value="debug"/>
    <appender-ref ref="MyAppender"/>
</logger>

Я пробовал разные размеры буфера, но запись в файл происходит только тогда, когдабуфер достигает 8 КБ.

Я не могу найти ни одной ошибки в Log4J, описывающей эту проблему, даже когда я мог найти другого парня, у которого была такая же проблема (без какого-либо решения).

Включение отладки Log4J показывает, что мой appender имеет правильный размер буфера, поэтому я думаю, что никто не перезаписывает мою конфигурацию.

Есть идеи, что я делаю неправильно?Это действительно ошибка или ограничение в Log4J?

Спасибо.

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Я заметил, что вы написали bufferedIO, начиная со строчной буквы, и BufferSize, начиная с прописной. Java по умолчанию чувствительна к регистру, поэтому, пожалуйста, сделайте так, чтобы все ваши параметры выглядели как в конструкторе (размер буфера должен быть в нижнем регистре).

Также, как я знаю, FileAppender устарел. WriterAppender является ближайшей заменой.

0 голосов
/ 03 декабря 2015

log4j 1.2.17
Погружение в исходный код, я нахожу DailyRollingFileAppender использование java.io.OutputStreamWriter для записи символов в файл журнала.Существует буфер в OutputStreamWriter .Размер 8 КБ (8192) в JDK 1,7Из-за этого второго кэша вы найдете: Если вы установите log4j.appender.file.bufferSize = 8192 , даже данные журнала будут больше 8192 (<= 8192 * 2), вжурнальный файл.Причина в том, что второй кэш (OutputStreamWriter) содержит первые 8192 символа, а кэш DailyRollingFileAppender содержит оставшиеся. </p>

JDK API java.io.OutputStreamWriter :

Каждый вызов метода write () приводит к тому, что преобразователь кодирования вызывается для данного символа (символов).Полученные байты накапливаются в буфере перед записью в основной выходной поток.Размер этого буфера может быть указан, но по умолчанию он достаточно велик для большинства целей.Обратите внимание, что символы, передаваемые в методы write (), не буферизируются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...