Tomcat 输出debug日志

本文提供了解决Tomcat无法启动的问题,并通过在WEB-INF/classes目录下新建logging.properties文件来获取更详细的启动日志的方法。通过设置特定的日志级别和输出路径,用户可以更好地定位和解决问题。
今天启动Tomcat启动不了,报以下错: 

org.apache.catalina.core.StandardContext startInternal 
SEVERE: Error listenerStart 
org.apache.catalina.core.StandardContext startInternal 
SEVERE: Context [/******] startup failed due to previous errors 

网上找了N多文章,都没有切中要害。 
后来在国外网站上搜到一个方法 
http://grails.1312388.n4.nabble.com/Deployment-problems-td4628710.html。 
我试了一下,是可以的。方案如下。 

Tomcat报的错太含糊了,什么错都没报出来,只提示了Error listenerStart。为了调试,我们要获得更详细的日志。可以在WEB-INF/classes目录下新建一个文件叫logging.properties,内容如下 

Java代码   收藏代码
  1. handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler  
  2.   
  3. ############################################################  
  4. # Handler specific properties.  
  5. # Describes specific configuration info for Handlers.  
  6. ############################################################  
  7.   
  8. org.apache.juli.FileHandler.level = FINE  
  9. org.apache.juli.FileHandler.directory = ${catalina.base}/logs  
  10. org.apache.juli.FileHandler.prefix = error-debug.  
  11.   
  12. java.util.logging.ConsoleHandler.level = FINE  
  13. java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter  


这样,我们再启动tomcat时,就会在logs目录下生成一个更详细的日志error-debug.2012-05-31.log。 

我们进去看看什么错吧。 
我碰到的错误是FileNotFoundException.大家碰到的错应该各式各样都有,所以就要具体问题具体分析了。 

tomcat的logging文档具体可参考http://tomcat.apache.org/tomcat-7.0-doc/logging.html 


本文装载自:http://xpenxpen.iteye.com/blog/1545648

<think>我们被要求回答用户关于Tomcat运行一段时间后自动打印debug日志的问题。根据用户提供的引用内容,我们可以分析原因并提供解决方案。 首先,根据引用内容,特别是引用[2]和引用[3],问题通常与日志系统的配置冲突有关。具体来说,当应用程序中同时存在多个日志框架(如log4j和logback)时,并且没有正确配置,可能会导致Tomcat以默认的debug级别打印大量日志。 关键点: 1. 打出的debug日志是用slf4j写的,而具体实现可能是logback(引用[3])。 2. logback在没有配置文件时会默认使用debug级别(引用[3])。 3. 应用程序中可能同时包含了logback, log4j和slf4j-log4j12等,导致日志实现冲突(引用[3])。 4. Slf4j无法主动选择具体的日志实现,而是根据类路径上的绑定来决定(引用[3])。 因此,问题产生的原因是:应用程序中引入了多个日志框架,而实际生效的日志框架(如logback)没有正确配置,使用了默认的debug级别,从而打印了大量debug日志。 解决方案: 1. 排除冲突的日志依赖:确保只使用一种日志实现框架。例如,如果希望使用log4j,则应该排除logback的依赖;反之亦然。 2. 提供正确的配置文件:对于选定的日志框架,提供适当的配置文件(如log4j.properties或logback.xml),并设置日志级别为INFO或更高级别,避免DEBUG级别。 3. 检查依赖树:使用Maven或Gradle的依赖分析工具,检查是否有多个日志框架被引入,并进行排除。 具体步骤(以Maven为例): - 排除logback依赖: ```xml <dependency> <groupId>your-group</groupId> <artifactId>your-artifact</artifactId> <version>your-version</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> ``` - 确保只保留一个日志绑定,比如使用log4j,则引入slf4j-log4j12: ```xml <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.30</version> </dependency> ``` - 在类路径下提供log4j.properties文件,并设置日志级别,例如: ```properties log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n ``` 另外,引用[1]中提到,用户通过新建Tomcat解决了问题,这可能是避免了之前Tomcat配置的某些冲突。但根本原因还是在于应用程序的日志配置。 总结:Tomcat大量打印debug日志通常是由于应用程序中多个日志框架冲突且未正确配置日志级别导致。解决方案是统一日志框架并正确配置。 §§相关问题§§ 1. 如何检查Java应用中的日志框架依赖冲突? 2. 如何配置Logback的日志级别? 3.Tomcat中如何单独配置某个Web应用的日志? 4. 除了排除依赖,还有哪些方法解决日志框架冲突? </think> ### Tomcat运行一段时间后自动打印debug日志的原因及解决方案 #### 问题原因分析 根据引用内容,Tomcat运行一段时间后大量打印debug日志的主要原因如下: 1. **日志框架冲突** 当应用同时引入多个日志框架(如Logback、Log4j和slf4j-log4j12)时,Slf4j无法主动选择具体实现[^3]。此时: - Logback在无配置文件时会**默认使用DEBUG级别**[^3] - 实际生效的日志框架(如Logback)会以默认级别输出大量调试信息 2. **依赖管理混乱** 如引用[3]所述,当war包中同时包含: ```plaintext logback-classic.jar log4j.jar slf4j-log4j12.jar ``` 这些库可能形成**循环绑定**,导致日志实现不可控[^4]。 3. **配置文件缺失或失效** 即使应用配置了log4j.properties设置INFO级别,但实际生效的Logback因缺少配置文件(logback.xml)仍使用DEBUG级别[^2]。 #### 解决方案 ##### 方法1:统一日志框架(推荐) ```xml <!-- Maven依赖调整示例 --> <dependencies> <!-- 移除冲突依赖 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <scope>provided</scope> <!-- 或直接排除 --> </dependency> <!-- 保留单一实现 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.32</version> </dependency> </dependencies> ``` **操作步骤**: 1. 检查并移除冗余依赖(使用`mvn dependency:tree`分析) 2. 确保只保留**一种**日志实现绑定 3. 在`log4j.properties`中明确设置: ```properties log4j.rootLogger=INFO, stdout ``` ##### 方法2:显式配置Logback 若需保留Logback,在资源路径添加`logback.xml`: ```xml <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <!-- 关键:设置全局INFO级别 --> <appender-ref ref="STDOUT" /> </root> </configuration> ``` ##### 方法3:Tomcat级配置 在`tomcat/conf/logging.properties`中覆盖默认级别: ```properties org.apache.catalina.level = INFO org.apache.coyote.level = INFO org.apache.jasper.level = INFO ``` #### 验证步骤 1. 重启Tomcat后执行: ```bash grep "DEBUG" catalina.out | wc -l # 检查DEBUG行数 ``` 2. 观察控制台输出是否仅显示INFO及以上级别日志 3. 使用JStack确认日志线程状态: ```bash jstack <tomcat_pid> | grep -i logback ``` > **注意**:如引用[1]所述,新建Tomcat实例可能临时解决问题,但根本原因仍是日志框架冲突[^1]。建议优先采用依赖治理方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值