2012-05-04 2 views
1

У меня возникли проблемы с настройкой Log4j правильно. Я ожидал, что Log4j вращать мой файл catalina.out в полночь при настройке его как следующий ..


log4j.properties:Log4j ежедневно катализирует Catalina.out без перезапуска Tomcat?

log4j.rootLogger=INFO, CATALINA 

# Define all the appenders 
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.CATALINA.File=/var/log/tomcat7/catalina.out 
log4j.appender.CATALINA.Append=true 
log4j.appender.CATALINA.Encoding=UTF-8 

# Roll-over the log once per day 
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd-HH-mm'.log' 
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout 
log4j.appender.CATALINA.layout.ConversionPattern =%d{HH:mm:ss} %5p [%t] - %m%n 


После настройки я перезагрузил Tomcat и все написано по адресу:

/var/log/tomcat7/catalina.out 


Чтобы проверить мою конфигурацию я изменил текущее время даты нравится 23:59:59:

#ls -l /var/log/tomcat7/ 
-rw-r--r-- 1 tomcat7 tomcat7 5840 4. May 00:00 catalina.out 


Как вы можете видеть, оно не вращается в полночи ...

(?) При повторном запуске Tomcat он отлично работает:

#ls -l /var/log/tomcat7/ 
-rw-r--r-- 1 tomcat7 tomcat7 5840 4. May 13:37 catalina.out 
-rw-r--r-- 1 tomcat7 root 2395 4. May 00:00 catalina.out.*CURRENTDATE*.log 

ли даже можно вращать мои логах без перезагрузки Tomcat?

Спасибо заранее, Марли

ответ

8

Есть три варианты решения этой проблемы:

  1. изменения по умолчанию кот вход фасад, который пишет catalina.o к, например: SLF4J, со всеми преимуществами, которые поставляются с использованием его и log4j.
  2. настроить систему cron для запуска logrotate файлов журнала tomcat
  3. изменить класс ведения журнала по умолчанию из ConsoleAppender в FileAppender.

Преимущества решений:

  1. очень гибок как SLF4J предлагает множество вариантов, особенно с log4j, что вы используете в любом случае.
  2. простой и не требует касания конфигурации tomcat.
  3. простое изменение конфигурации, которая отключает вывод на консоль

Недостатки:

  1. требует дополнительных библиотек, влияет на все приложения, кот хозяйничает, требует замены конфигурации по умолчанию с log4j.
  2. cron + logrotate работает только в linux; это может быть не так просто в окнах с планировщиком. Требуется дополнительный скриптинг в среде Windows.
  3. обеспечивает только простую резервную копию с датой. Невозможно установить шаблон даты. Не сжимает повернутые файлы.

    Решения для первого вопроса, описываются here
    Solution для второго выпуска описывается here
    Решения для третьего вопроса описан here

Также Вы можете комбинировать решения. Например, используйте crontab для gzip-файлов, которые создаются путем изменения catalina.out на другое имя. Я также предлагаю оставить tomcat, чтобы он регистрировался на catalina.out и настраивал ваше приложение в другом файле с log4j. Таким образом, журналы из tomcat, которые не несущественны, не будут спамить ваши журналы.

1

ли даже можно вращать мои логах без перезагрузки Tomcat?

Да, если вы готовы работать на это.

Ваша конфигурация log4j только закончит борьбу со стандартным перенаправлением оболочки, которое bin/catalina.sh использует для перенаправления stdout на logs/catalina.out. Вы не можете просто использовать конфигурацию log4j для изменения поведения System.out.

Если вы хотите повернуть конф/catalina.out вам придется принять некоторые альтернативные меры в зависимости от того, как запустить Tomcat:

  • Если вы используете JSVC для запуска Tomcat и вы используете Викисклад демон 1.0 .4 или новее, вы можете отправить SIGUSR1 в процесс jsvc для повторного открытия файлов журнала. Это позволит вам переместить существующий файл журнала в другой файл (который просто изменяет свое имя и продолжает регистрироваться в новом имени файла), а затем «убить SIGUSR1»: исходное имя файла будет снова открыто, а новые сообщения журналов будут пойдите к нему.
  • Если вы используете bin/catalina.sh для запуска Tomcat, вы можете изменить его таким образом, чтобы он больше не перенаправлял, а вместо этого выводил вывод на процесс roll-logger, например, Rotateelogs Apache httpd или хронолог.
Смежные вопросы