java日志系统简介: 从tomcat大量打印debug日志说起
来源:互联网 发布:常用音频编辑软件 编辑:程序博客网 时间:2024/04/29 01:59
文章搬家至 http://www.cnblogs.com/buptl/p/6653126.html
目前,java下应用最广泛的日志系统主要就是两个系列: log4j和slf4j+logback 。
其中,slf4j只包含日志的接口,logback只包括日志的具体实现,两者加起来才是一个完整的日志系统。Log4j则同时包含了日志接口和实现。
这两套日志系统之间有可以相互兼容的组件,分别是slf4j-log4j12和 log4j-over-slf4j,引入之后就可以用log4j打出slf4j接口的日志,或者用logback打出log4j接口的日志。
背景知识介绍到这里,再简单说一下标题里提到的问题。问题的现象就是我们在war包里配置了log4j的日志级别为info, 但在catalina里却一直在打大量的debug日志。初看现象肯定很诡异,前期各种研究tomcat配置也没什么头绪。直到磁盘压力太大,去看jstack发现大量进程是等待在Logback代码中,才发现之前关注错了重点。再去具体了解了java下的日志系统后,问题也就很明了了。
先把几个事实摆出来:
1. 打出的debug日志都是用slf4j写的,根据堆栈得知logback具体执行了日志打印
2. logback在无配置文件时默认debug级别
3. 我们的war包中同时包含logback,log4j和slf4j-log4j12
4. Slf4j无法主动选择具体的日志实现
想必看到这里,大家也明白了问题所在。根据我们引入的包,log4j和logback都可以实现打印slf4j日志,而具体谁来打,不是一个用正常办法可以控制的事情,在这个具体案例下,logback就成了具体的日志打印者。而因为我们其实是想用lo4j打日志,所以没有配logback配置,所以logback就按默认的debug级别打了大量日志。
解决办法也很简单,就是把logback的包全去掉。看似有些暴力,但确实是最合理的一个解决办法。
最后提供一个排查日志问题的通用套路,免得找不到方向乱看。
1. 找几行不符合自己日志配置的具体日志,翻阅对应代码,看看是哪个日志接口打的
2. 查jar包,看看这套日志框架有哪些具体实现
3. 把多的jar包去掉
- java日志系统简介: 从tomcat大量打印debug日志说起
- 从Tomcat服务器的日志说起
- linux系统实时打印tomcat运行日志
- Tomcat 输出debug日志
- tomcat打印日志
- tomcat打印日志
- c语言 DEBUG 日志打印
- 打印debug级别的日志
- zookeeper输出大量debug日志原因分析
- java正则表达式从大量日志中筛选有用数据
- log4日志级别为INFO,Tomcat控台依然刷出大量Debug信息的解决方案
- tomcat日志简介
- 打印系统日志
- Tomcat调试及日志打印
- tomcat打印详细日志信息
- 详细打印tomcat的日志
- 日志收集系统简介
- Tomcat日志系统详解
- SSL P2463 2015年普级组模拟试题 序列
- 【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊
- Codeforces Round #407 (Div. 2) C
- List<T>的各种排序方法
- android studio常用插件
- java日志系统简介: 从tomcat大量打印debug日志说起
- 敏捷开发实践之问题2
- 链表求和
- 实用:使用caffe训练模型时solver.prototxt中的参数设置解析
- 生成、下载文件总是少一个字节原因之一
- jquery动态改变css
- PDO预处理--变量绑定
- 站位1
- 关于在eclipse中编译后的java小程序如何在命令行窗口运行的说明