Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: James McMahonОтветов: 4

Какие значения конфигурации необходимы для настройки 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 без расширения.

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

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

javaloggingconfigurationlog4j

Ответы

Ответ 1 · рейтинг 1 · Pascal Thivent

Я основал эту конфигурацию на этом сообщении в блоге, но она ведет себя не так, как он описывает. Журнал создается как 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.

Ответ 2 · Maxime ARNSTAMM

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

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

Ответ 3 · delfuego

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

Ответ 4 · rsp

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы