Создание ежедневных журналов с помощью Log4j?

Какие значения конфигурации необходимы для настройки Log4j для использования следующего шаблона?
MyApp-Mon.log
MyApp-Tue.log
MyApp-Wed.log
И т. д.

С каждым файлом, содержащим журнал дней.

Это звучит достаточно просто сделать с помощью DailyRollingFileAppender от Log4j, но у меня возникли проблемы.
Вот моя текущая конфигурация;

<appender name="daily-file" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="Threshold" value="info"/>
    <param name="DatePattern" value="'-'EE'.log'"/>
    <param name="file" value="MyApp"/>
    <param name="Append" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{EEE MMM dd hh:mm:ss zzz yyyy} %-5p %l - %m%n"/>
    </layout>
</appender>

Я создал эту конфигурацию на основе этого блога. пост, но он ведет себя не так, как он описывает. Журнал создается как MyApp без расширения.

Может кто-нибудь помочь мне здесь?


person James McMahon    schedule 18.11.2009    source источник
comment
Ваше значение DatePattern выглядит довольно странно, у вас там несколько одинарных кавычек.   -  person skaffman    schedule 18.11.2009
comment
@skaffman, это сделано намеренно, я взял это из этого блога и из другого источника, который я просматривал некоторое время назад. Я предположил, что это должно было отделить формат даты Java от текста, добавленного к имени файла журнала.   -  person James McMahon    schedule 18.11.2009
comment
Я отредактировал вопрос до его простейшей формы, чтобы уменьшить путаницу.   -  person James McMahon    schedule 18.11.2009
comment
@James: я думаю, что это шаг назад, теперь у нас меньше информации   -  person skaffman    schedule 18.11.2009


Ответы (4)


Я основал эту конфигурацию на этом сообщении в блоге, но она ведет себя не так, как он описывает. Журнал создается как MyApp без расширения.

Вот что вы сказали Log4J сделать с этой строкой:

<param name="file" value="MyApp"/>

Log4J использует значение этого параметра в качестве имени файла журнала, а шаблон применяется только тогда, когда происходит перенос, как задокументировано:

Например, если для параметра File установлено значение /foo/bar.log, а для DatePattern установлено значение '.'yyyy-MM-dd, 16 февраля 2001 г. в полночь, файл журнала /foo/bar.log будет скопировано в /foo/bar.log.2001-02-16, а ведение журнала за 2001-02-17 будет продолжаться в /foo/bar.log до следующего дня.

Так что мне все кажется нормальным.

Чтобы получить желаемое поведение, вы можете написать свой собственный Appender. Похоже, что Джеймс Штауффер сделал что-то очень похожее (см. этот ответ), но он расширяет FileAppender. Однако его работу несложно адаптировать для подкласса DailyRollingFileAppender.

person Pascal Thivent    schedule 18.11.2009
comment
@Pascal, я немного уточню свой вопрос. Как я могу получить предполагаемое поведение, которое я ищу? Я пытаюсь загрузить эти журналы в устаревшее средство просмотра журналов, которое есть в этом отделе. - person James McMahon; 18.11.2009

текущий лог-файл называется MyApp, завтра он будет переименован в Myapp-yesterday и т. д.

но текущий журнал всегда имеет имя по умолчанию.

person Maxime ARNSTAMM    schedule 18.11.2009
comment
В любом случае, чтобы добавить шаблон даты по умолчанию? - person James McMahon; 18.11.2009

Глядя на JavaDocs для DailyRollingFileAppender, все примеры, которые они изложили, имеют определенные числовые шаблоны дат, а не шаблоны названий дней. Вы пытались увидеть, работает ли использование одного из их примеров? Если это так, а у вас нет, то я бы предположил, что DailyRollingFileAppender не поддерживает использование шаблона даты, содержащего «E» (день недели).

person delfuego    schedule 18.11.2009
comment
Только что протестировал его, используя минутный шаблон, гггг-ММ-дд-ЧЧ-мм-EE, EE разрешается в имя даты. - person James McMahon; 19.11.2009

В ответ на ваш комментарий к ответу Паскаля:

Будет ли работать ln -s MyApp.log MyApp-NOW.log? Ваш устаревший просмотрщик журналов будет отображать MyApp-NOW.log через символическую ссылку, а log4j может преобразовать MyApp.log в MyApp-TUE.log в полночь.

person rsp    schedule 18.11.2009
comment
@rsp, мы используем Windows на наших серверах, поэтому решение с символической ссылкой невозможно. - person James McMahon; 18.11.2009
comment
Возможно, вы сможете использовать ярлык Windows? Также, если у вас Vista или новее, я вижу в msdn, что Windows поддерживает символические ссылки с помощью команды mklink. (не могу проверить, у меня XP) - person rsp; 18.11.2009