2012-04-04 144 views
2

正如我在标题中提到的,我的slf4j tomcat日志记录配置存在问题。事情是,虽然我可以将catalina.out转换为像日常appender这样的不同文件,但是catalina.out文件本身仍在继续增长,我无法弄清楚原因。Tomcat日志记录catalina.out正在不断增加

顺便说一句,我已经使用我的应用程序的日志文件,以便使用slf4j logger.info调试和任何其他功能,但是我仍然需要catalina.out来从控制台上看到正在发生的事情。这就是为什么我需要同时继续使用catalina.out和myApplication.log。

这里是我的tomcat记录下TOMCAT_HOME性能/ conf目录

handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler 

.handlers = 1catalina.org.apache.juli.FileHandler 

1catalina.org.apache.juli.FileHandler.level = FINE 
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 
1catalina.org.apache.juli.FileHandler.prefix = catalina. 

2localhost.org.apache.juli.FileHandler.level = FINE 
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 
2localhost.org.apache.juli.FileHandler.prefix = localhost. 

3manager.org.apache.juli.FileHandler.level = FINE 
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 
3manager.org.apache.juli.FileHandler.prefix = manager. 

4host-manager.org.apache.juli.FileHandler.level = FINE 
4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 
4host-manager.org.apache.juli.FileHandler.prefix = host-manager. 

java.util.logging.ConsoleHandler.level = FINE 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 


############################################################ 
# Facility specific properties. 
# Provides extra control for each logger. 
############################################################ 

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler 

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler 

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler 
+1

你问的是错误的问题。正确的问题是为什么首先将任何东西写入catalina.out。当Tomcat启动和停止时,该文件应该会看到一些条目。其他任何事情都是问题的表征。 – 2012-04-04 18:54:03

+0

你说得对!我正在研究为什么它的行为如此.. – Javatar 2012-12-04 09:44:11

回答

2

Tomcat的这一政策如下:

它不应该是一个问题,因为没有什么应该被打印到 标准输出因为你正在使用一个日志包

至于我我不同意他们导致大部分的实时开发人员将“DO”日志记录到控制台,作为日志框架appender/handlers之一,用于开发时间调试目的(例如,只是为了在IDE控制台上看到日志输出)。

这里是我使用的解决方案...

设置你的日志框架写东西到标准输出上你的开发/分期/生产环境。 这将保持catalina.out非常小,只需使用直接标准输出写入(适用于log4j,logback等写入)的基本信息。 因为如果你有一些直接的标准输出写入,你将需要用记录器替换它们。

正如我上面所说的,在开发IDE(Eclipse,IDEA或其他任何你使用的)的时候写标准输出对于在开发者控制台中看到这些日志是有用的。

这里是你如何调整所有以的logback配置(但log4j的完美的作品,我相信其他日志框架):

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
     <level>${my.console.level}</level> 
    </filter> 
    <encoder> 
     <pattern>%d %-5p [%c{0}] %m%n</pattern> 
    </encoder> 
</appender> 

于是我就用

<level>${my.console.level}</level> 

指定日志记录级别为控制台appender。

然后只通过-Dmy.console.level = OFF为您的专用环境(dev,staging,prod)上的jvm启动禁用写入标准输出。 在IDE中使用-Dmy.console.level = ALL

基本上就是这样。您也可以使用这种方法来控制您的记录器日志级别。