Где настраивать внутренние файлы журнала 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
-
Найдите context.xml
в Tomcat по пути: -
YourTomcatInstallDir\conf\context.xml
-
Отредактируйте контекстный тег, чтобы добавить swallowOutput="true"
как swallowOutput="true"
ниже: -
<Context swallowOutput="true">
(Это поглощает все ваши stdout/stderr и перенаправляет в основную систему ведения журналов.)
-
В вашем 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]()
Вот скриншот вкладки "Ведение журнала". Это приложение может генерировать несколько файлов:
- Файл журнала
commons-daemon
. -
Pid file
. Мы не заботимся об этом прямо сейчас. -
Redirect Stdout
журнала Redirect Stdout
. -
Redirect Stderror
журнала Redirect Stderror
.
!["Logging" tab of procrun app]()
Итак, есть 3 файла журнала. Ни один из них не вращается по умолчанию. ProcRun НЕ предлагает возможности для этого.
Таким образом, есть несколько обходных путей, которые приходят мне на ум:
- Отключить создание файлов stdout/stderr (см. Ниже). Вам по-прежнему понадобится способ очистить старые файлы "commons-daemon". (Я не знаю, как отключить создание этих файлов. Просто очистка текстового поля НЕ поможет). Но, по крайней мере, они должны быть небольшими по размеру.
- Периодически перезапускайте сервис Tomcat. Это создаст файл с меткой времени с текущей датой. Вам по-прежнему понадобится способ очистить старые файлы commons-daemon/stdout/stderr.
- Используйте внешнюю утилиту Logrotate-for-Windows для вращения текущего файла и очистки старых повернутых файлов.
- Не используйте 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