在哪里配置内部tomcat7 stdout / stderr日志文件

时间:2013-11-05 10:53:28

标签: tomcat logging log4j tomcat7

根据http://tomcat.apache.org/tomcat-7.0-doc/logging.html

,我正在使用tomcat 7.0.40和log4j配置

一切都按预期工作,除了创建了一些日志文件,这些日志文件实际上没有在我的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-MM-dd.log
  • tomcat7-stdout.yyyy-MM-dd.log

如你所见,他们使用每日滚动文件appender,这是不需要的,因为我需要一个免维护系统,所以我更喜欢使用maxBackupIndex的scrollfileappender来防止日志无限增长。

那么我在哪里可以配置stdout,stderr和commons-daemon日志?是否有某些配置或我可以用我自己的log4j配置覆盖配置? THX

5 个答案:

答案 0 :(得分:18)

我预见到我们的某个系统将来会有一些类似的要求/面临同样的问题。所以热衷于自己找到一些解决方案/解决方法。

首先查看commons-daemon以查看我们是否可以执行任何配置以在日志上实现maxbackupindex;但搜索没有多大帮助。

然而,我找到了两种方法来处理“tomcat日志越过限制”。

第一种方法:在Tomcat内部配置

  1. 在路径中找到Tomcat中的context.xml: -

    YourTomcatInstallDir\conf\context.xml  
    
  2. 编辑上下文代码以添加swallowOutput="true",如下所示: -

    <Context swallowOutput="true">
    

    (这会吞下你所有的stdout / stderr并重定向到你的底层日志系统。)

  3. 在你的log4j.properties中;添加config以将org.apache.catalina日志重定向到您自己的日志文件。

    您的记录器将如下所示: -

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

    (在YourAppender现在,您可以设置MaxBackupIndexMaxFileSize来实现定义的翻转次数和日志大小限制。)

  4. 如果上述方法不起作用;您可以尝试使用第二种方法中提到的外部实用程序

    第二种方法:使用“logrotate”

    进行外部配置

    有一个名为logrotate的简单工具可用于对您无法控制的日志产生预期效果。这里有一些链接可以帮助您入门。

    使用此工具非常简单,快速浏览这些链接可以满足您的需求。

答案 1 :(得分:13)

我有同样的问题,最后偶然发现了解决方案。 Tomcat 7 for Windows有一个名为Monitor Tomcat的tomcat属性应用程序。在日志选项卡上,您需要删除重定向标准输出和标准输入框中的“自动”值。只需将其留空即可创建这些文件。然后,您可以使用log4j为这些关键文件创建滚动日志文件,以便将来进行调试。

希望有所帮助。

答案 2 :(得分:1)

在Windows上,您必须转到tomcat / bin / service.bat并编辑PR_LOGPATH变量(所有这些)。 并且可能通过&#34; service remove&#34;重新安装服务。和&#34;服务安装&#34; 在Linux系统上,解决方案必须非常相似

答案 3 :(得分:1)

禁止通过Apache“ Commons Daemon Service Manager”创建文件

短版:删除服务应用内的auto文本。这将禁用stdout和stderr文件的创建。我认为,您一直使用的“ commons-daemon”文件。

长版,请参见下文。


Tomcat for Windows有一个特殊的小服务应用程序。这个程序有几个名字。例如:Commons Daemon Service Managerprocrun。 EXE文件通常称为Tomcat7w.exe / YourServiceNameHere w.exe / Tomcat9w.exe之类的东西。

Windows图标仅被标记为Monitor Tomcat。从此开始,您将直接进入Logging标签。

"Monitor Tomcat" icon

这是“日志记录”标签的屏幕截图。这个应用程式可以产生几个档案:

  1. commons-daemon日志文件。
  2. Pid file。我们现在不在乎这个。
  3. Redirect Stdout日志文件。
  4. 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文本。这应该完全禁用这些文件的生成。

进一步阅读

答案 4 :(得分:0)

对于那些只想自定义创建这三个日志的位置的人: 如果您将Tomcat作为服务运行,并且想要自定义commons-daemon,stderror和stdout所在的位置,则可以使用命令行参数--LogPath启动服务,或者在服务器计算机上使用自定义路径设置环境变量PR_LOGPATH。

这里也记录了其他参数: https://tomcat.apache.org/tomcat-8.0-doc/windows-service-howto.html