Где настраивать внутренние файлы журнала tomcat7 stdout/stderr

Я использую tomcat 7.0.40 с конфигурацией log4j согласно http://tomcat.apache.org/tomcat-7.0-doc/logging.html

Все работает как ожидалось, за исключением того, что создаются некоторые файлы журналов, которые на самом деле не настроены в моем log4j.properties:

log4j.rootLogger=INFO, CATALINA

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.RollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.log
log4j.appender.CATALINA.MaxFileSize=3MB
log4j.appender.CATALINA.MaxBackupIndex=10
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.LOCALHOST=org.apache.log4j.RollingFileAppender
log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost.log
log4j.appender.LOCALHOST.MaxFileSize=3MB
log4j.appender.LOCALHOST.MaxBackupIndex=10
log4j.appender.LOCALHOST.Append=true
log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.MANAGER=org.apache.log4j.RollingFileAppender
log4j.appender.MANAGER.File=${catalina.base}/logs/manager.log
log4j.appender.MANAGER.MaxFileSize=3MB
log4j.appender.MANAGER.MaxBackupIndex=10
log4j.appender.MANAGER.Append=true
log4j.appender.MANAGER.Encoding=UTF-8
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.HOST-MANAGER=org.apache.log4j.RollingFileAppender
log4j.appender.HOST-MANAGER.File=${catalina.base}/logs/host-manager.log
log4j.appender.HOST-MANAGER.MaxFileSize=3MB
log4j.appender.HOST-MANAGER.MaxBackupIndex=10
log4j.appender.HOST-MANAGER.Append=true
log4j.appender.HOST-MANAGER.Encoding=UTF-8
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=\
  INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=\
  INFO, HOST-MANAGER

Файлы, которые создаются, хотя они не в моей конфигурации:

  • Обще-daemon.yyyy-MM-dd.log
  • tomcat7-stderr.yyyy-ММ-dd.log
  • tomcat7-stdout.yyyy-ММ-dd.log

Как вы видите, они используют ежедневный скопированный файл-приложение, что нежелательно, поскольку мне нужна система, не требующая обслуживания, поэтому я бы предпочел, чтобы rollfileappender, который maxBackupIndex предотвратил неограниченный рост журналов.

Итак, где я могу настроить журналы stdout, stderr и commons-daemon? Есть ли какая-то конфигурация где-нибудь или я могу переопределить конфигурацию с помощью моей собственной конфигурации log4j? спасибо

Ответы

Ответ 1

Я предвижу, что у нас появятся аналогичные требования/мы столкнемся с той же проблемой через некоторое время в будущем на одной из наших систем. Так что был заинтересован в поиске решения/обходного пути сам.

Сначала заглянул в commons-daemon, чтобы увидеть, есть ли какая-либо конфигурация, которую мы можем сделать для достижения maxbackupindex в логах; но поиск не сильно помог.

Тем не менее, я нашел два подхода, которые люди применяют для борьбы с "превышением границ бревен котов".

Первый подход: настройка внутри Tomcat

  1. Найдите context.xml в Tomcat по пути: -

    YourTomcatInstallDir\conf\context.xml  
    
  2. Отредактируйте контекстный тег, чтобы добавить swallowOutput="true" как swallowOutput="true" ниже: -

    <Context swallowOutput="true">
    

    (Это поглощает все ваши stdout/stderr и перенаправляет в основную систему ведения журналов.)

  3. В вашем log4j.properties; добавьте config, чтобы перенаправить ваши журналы org.apache.catalina в ваш собственный файл журнала.

    Ваш логгер будет выглядеть так:

    log4j.logger.org.apache.catalina=INFO, YourAppender
    

    YourAppender теперь вы можете установить MaxBackupIndex и MaxFileSize чтобы достигнуть определенного вами количества опрокидываний и ограничения на размер журнала.)

Если вышеуказанный подход не работает; вы можете попробовать использовать внешнюю утилиту, как указано во втором подходе

Второй подход: настроить внешне с помощью "logrotate"

Существует простой инструмент, называемый logrotate для достижения желаемого эффекта в журналах, которые вы не можете контролировать. Вот несколько ссылок, с которых можно начать.

Использование этого инструмента довольно просто, и быстрый просмотр этих ссылок даст вам то, что вам нужно.

Ответ 2

У меня была такая же проблема и, наконец, наткнулся на решение. Tomcat 7 для Windows имеет приложение свойств tomcat под названием Monitor Tomcat. На вкладке ведения журнала вам нужно удалить значение "auto" в блоках ввода-вывода stdout и stderr. Просто оставьте поле пустым и не создаст эти файлы. Затем вы можете использовать log4j для создания скользящих файлов журналов для этих критически важных файлов для будущих целей отладки.

Надеюсь, что это поможет.

Ответ 3

В окнах вам нужно будет перейти к tomcat/bin/service.bat и отредактировать переменную PR_LOGPATH (все из них). И, вероятно, переустановите службу с помощью "service remove" и "service install", В Linux-системах решение должно быть очень похожим

Ответ 4

Отключить создание файлов через Apache "Commons Daemon Service Manager"

Короткая версия: Удалите auto внутри сервисного приложения. Это отключит создание файлов stdout и stderr. Я думаю, что файл "commons-daemon" застрял в тебе.

Длинную версию смотрите ниже.


Tomcat для Windows имеет специальное небольшое сервисное приложение. Это приложение имеет несколько названий. Например: Commons Daemon Service Manager, procrun. И EXE файл обычно называется что-то вроде Tomcat7w.exe/YourServiceNameHere w.exe/Tomcat9w.exe.

Значок Windows просто помечен как Monitor Tomcat. И начав это, вы попадете прямо на вкладку " Logging ".

"Monitor Tomcat" icon

Вот скриншот вкладки "Ведение журнала". Это приложение может генерировать несколько файлов:

  1. Файл журнала commons-daemon.
  2. Pid file. Мы не заботимся об этом прямо сейчас.
  3. Redirect Stdout журнала Redirect Stdout.
  4. Redirect Stderror журнала Redirect Stderror.

"Logging" tab of procrun app

Итак, есть 3 файла журнала. Ни один из них не вращается по умолчанию. ProcRun НЕ предлагает возможности для этого.

Таким образом, есть несколько обходных путей, которые приходят мне на ум:

  1. Отключить создание файлов stdout/stderr (см. Ниже). Вам по-прежнему понадобится способ очистить старые файлы "commons-daemon". (Я не знаю, как отключить создание этих файлов. Просто очистка текстового поля НЕ поможет). Но, по крайней мере, они должны быть небольшими по размеру.
  2. Периодически перезапускайте сервис Tomcat. Это создаст файл с меткой времени с текущей датой. Вам по-прежнему понадобится способ очистить старые файлы commons-daemon/stdout/stderr.
  3. Используйте внешнюю утилиту Logrotate-for-Windows для вращения текущего файла и очистки старых повернутых файлов.
  4. Не используйте ProcRun и не запускайте Windows Tomcat другим способом. Это не создаст ни один из файлов commons-daemon/stdout/stderr.

Я думаю, что официальная позиция может быть кратко сформулирована так: "Что? Ваши файлы catalina/stdout/stderr становятся слишком большими? Что ж, вам все равно не следует ничего регистрировать". Другими словами: единственная официально поддерживаемая опция - это номер 1 (и 4).

Отключение создания stdout/stderr

В моих Tomcats файл "commons-daemon" обычно очень мал и только когда получает или запускает Tomcat только несколько новых строк. Даже на Level: Debug.

Перенаправленные файлы stdout и stderr могут стать ОЧЕНЬ большими.

Однако вы можете удалить auto из текстовых полей. Это должно полностью отключить генерацию этих файлов.

дальнейшее чтение

Ответ 5

Для тех, кто просто хочет настроить местоположение, где создаются эти 3 журнала: Если вы запускаете Tomcat как сервис и хотите настроить, где находятся commons-daemon, stderror и stdout, вы можете запустить свой сервис с параметром командной строки [CN00 ] или установите на компьютере-сервере переменную среды PR_LOGPATH с вашим собственным путем.

Это задокументировано и здесь вместе с другими параметрами: https://tomcat.apache.org/tomcat-8.0-doc/windows-service-howto.html