Как контролировать файл журнала с ежедневной прокаткой и максимальным размером файла с помощью log4j? - PullRequest
11 голосов
/ 03 ноября 2011

Я хотел бы создать файл журнала, который можно будет свернуть в начале следующего дня или, если он достигнут указанного размера, и файл журнала должен содержаться в папке даты.Формат папки YYYYMMDD (/20111103/mylogfile.log)

Возможно ли это сделать с помощью Log4j без реализации пользовательского класса?

Теперь я использую log4j и log4j-extra, я устанавливаю атрибут FileNamePattern, как это определено в log4j API, для ежедневной прокрутки моего файла и устанавливаю максимальный размер файла 50 МБ.

My log4j.xml is:

<appender name="MYAPPENDER" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="encoding" value="UTF-8" />
    <param name="append" value="true" />
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" value="${catalina.home}/logs/MY-APP/%d{yyyyMMdd}/MY-APP_%d{yyyyMMddHHmmss}.log" />
    </rollingPolicy>
    <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
        <param name="maxFileSize" value="50000000" />
    </triggeringPolicy>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="[%d{dd/MM/yyyy HH\:mm\:ss}] %-5p [%c.%M(),%4L] - %m%n" />
    </layout>
</appender>

Результатом вышеописанной настройки является то, что файл журнала не катится в начале следующих дней, но если размер файла достиг 50 МБ, файл журнала будет свернут.

Пожалуйста, помогитепосоветовать мне.м (_ _) м

Ответы [ 3 ]

7 голосов
/ 03 февраля 2016

Ежедневно работает для меня, если рассматриваемый xml преобразован только в log4j.properties, эквивалентный переворачиванию после 100 КБ (в целях тестирования):

# Root logger option
log4j.rootLogger=INFO, file

# Direct log messages to a file
log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.RollingPolicy.FileNamePattern=/path/to/logs/%d{yyyyMMdd}/myLog_%d{yyyyMMddHH}.log
log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
log4j.appender.file.TriggeringPolicy.maxFileSize=100000
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file.Append=true

При этом будет создан каталог с метками времени (один каталог в день - необязательно) с журналами в следующем формате (один в час для целей тестирования - измените FileNamePattern в соответствии с вашими потребностями):

myCompanyLog_20160203 10 30.log

1010 * myCompanyLog_20160203 * 11 1012 * 30.log *

5 голосов
/ 01 октября 2014

Чтобы включить ежедневное обновление: class = "org.apache.log4j.DailyRollingFileAppender"

И чтобы включить максимальный размер файла и количество файлов резервных копий

<param name="MaxFileSize" value="200MB" />  
<param name="MaxBackupIndex" value="4" />

Но вы не можете поставить MaxFileSize с DailyRolling, поэтому вы можете использовать прокручиваемый файл appender

Пример:

<appender name="MAIN_FA" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="logs/main.log" />
    <param name="datePattern" value="'-'yyyy-MM-dd'.log'" />
    <param name="append" value="false" />
    <param name="Threshold" value="ALL" />
    <param name="MaxFileSize" value="200MB" />  
    <param name="MaxBackupIndex" value="4" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" />
    </layout>
</appender>

Или вы можете сделать это http://wiki.apache.org/logging-log4j/DailyRollingFileAppender

2 голосов
/ 29 декабря 2011

Из приложения RollingFileAppender Документация

Чтобы быть полезным, экземпляр RollingFileAppender должен иметь настройки RollingPolicy и TriggeringPolicy .... TimeBasedRollingPolicy действует и как RollingPolicy, и как TriggeringPolicy.

Следовательно, ваш SizeBasedTriggeringPolicy игнорируется, так как TimeBasedRollingPolicy настроен выше. Единственным способом удовлетворить ваши требования будет реализация пользовательских классов.

Кроме того, если размер файла журнала действительно имеет значение, вы можете рассмотреть возможность использования автоматического сжатия gzip для устранения SizeBasedTriggeringPolicy, и ваши журналы будут катиться только каждый день.

...