2013-10-10 2 views
8

Я пытаюсь создать новые файлы журнала на почасовой основе. Я использую TimeBasedTriggerringPolicy lo4j2 в RollingFileAppender. Ниже приведен пример кода конфигурации xml, который я взял с официального сайта log4j2.Политика запуска по времени в log4j2

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn" name="MyApp" packages=""> 
    <Appenders> 
     <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd-HH}-%i.log.gz"> 
     <PatternLayout> 
      <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> 
     </PatternLayout> 
     <Policies> 
      ** 
      <TimeBasedTriggeringPolicy interval="1" modulate="true" /> 
      ** 
      <SizeBasedTriggeringPolicy size="250 MB" /> 
     </Policies> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
     <Root level="error"> 
     <AppenderRef ref="RollingFile" /> 
     </Root> 
    </Loggers> 
</Configuration> 

В атрибуте interval я установил 1, что означает 1 час. Но все же мой файл не катится каждые 1 час.

Пожалуйста, помогите мне найти какую-либо ошибку.

Примечание: Я включил beta9 из log4j2 (который является последним)

ответ

13

1 здесь указывает 1 день и не 1 час. Я проверил вручную с более низкой конфигурацией.

<RollingFile name="T" fileName="/data_test/log/abc.log" 
     filePattern="/data_test/log/abc-%d{MM-dd-yyyy}-%i.log"> 
     <PatternLayout> 
      <Pattern>%d{ISO8601} %-5p [%t] (%F:%L) - %m%n</Pattern> 
     </PatternLayout> 
     <Policies>    
      <TimeBasedTriggeringPolicy interval="1" modulate="true"/> 
      <SizeBasedTriggeringPolicy size="100 KB" /> 
     </Policies> 
    </RollingFile> 

Для ручного тестирования я меняю системную дату и время. Сначала попробуйте увеличить 1 час. Файлы журнала будут генерироваться, но не в соответствии с ожиданием. Затем измените системную дату, увеличьте ее на 1 день, а затем просмотрите результаты.

Предположим, что последний файл журнала (abc.log) в день 29 октября составляет 50 КБ. Размер конфигурации - 100 КБ. Если мы изменим день (увеличение на 1 день), а затем запустим. Затем последний файл будет переименован 29-Oct- (некоторый порядковый номер) .log (файл 50 КБ при его копировании), и новый файл будет создан с помощью abc.log

Я пробовал это с помощью простого сервлета с ниже конфигурации в web.xml

<context-param> 
    <param-name>log4jConfiguration</param-name> 
    <param-value>log4j2.xml</param-value> 
</context-param> 

хранить log4j2.xml в папке src. log4j2.xml не загружается, если мы сохраняем его в classpath.

+11

interval = Частота опроса должна происходить на основе самой конкретной единицы времени в шаблоне даты. Например, с шаблоном даты с часами в качестве наиболее конкретного элемента и с шагом в 4 прокрутки будет происходить каждые 4 часа. Значение по умолчанию равно 1. Итак, если у вас есть шаблон типа «yyyy-MM-dd-HH», файл будет скатываться каждый час, а если он «yyyy-MM-dd», файл будет скатываться каждый день , – Abid

+0

и могу ли я спросить, что заменяется на% i в шаблоне файла – hudi

+0

Я полагаю, что% i будет увеличиваться, если вы перевернете на основе файла журнала, который будет больше, чем ограничение по размеру, а не время. – yegeniy

2

У вас есть непустой файл журнала (в противном случае нет ничего пролонгировать)?

Обратите внимание, что даже при том, что имя «TimeBased ...» На самом деле оно не перевернется в указанное время, но в первом событии журнала, которое поступит после превышения порогового значения времени. Можете ли вы попробовать с небольшой тестовой программой, которая регистрирует что-то через 61 минуту или около того и посмотреть, все еще проблема?

Если он не перевернется с вышеуказанной тестовой программой, возможно, вы обнаружили ошибку. В этом случае, пожалуйста, поднимите его на трекер log4j. (Обязательно приложите тестовую программу, которую команда может использовать для воспроизведения проблемы).

1

Как указано Абидом, значение интервала интерпретируется в контексте шаблона, который указан как часть файла filepattern. Он начинается с наименьшего номинала. Например, если шаблон содержит S, частота будет в миллисекундах. Он поддерживает шаблон даты, подробно описанный как часть SimpleDateFormat java doc http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html