log4j和logback的冲突导致日志输出异常

前一阵在在项目中碰到一个日志问题。工程使用的是log4j,log4j.xml中也配置了工程日志路径和策略,并把日志级别定为warn。但不管是测试环境还是线上环境,都发现除了应用自身的日志,以及指定输出日志,工程中依赖的包输出的日志都打到了tomcat自身的日志文件中,并且debug的日志也一并输出,导致tomcat的日志文件增长非常快,没几天就把服务器空间占满。线上服务器还好,有脚本自动清理,测试环境的服务器直接宕机。

最初,以为是tomcat配置问题,找到PE检查脚本,发现跟tomcat并无直接关系。无奈只好求助师兄,检查一下午才发现工程中配置的log4j,但粗心混入了logback的jar包。

<!-- 日志 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.2</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.0.9</version>
				<!-- <scope>runtime</scope> ! -->
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>99.0-does-not-exist</version>
		</dependency>

都知道log4j和logback会冲突,但没想到会以这样的情况出现,去掉logback-classic包,系统日志恢复正常了。

log4j+sjf4j需要的jar包包括:

log4j-1.2.xx.jar
             slf4j-api-x.x.x.jar
             slf4j-log4j12-x.x.x.jar

logback+sjf4j需要的jar包有

logback-classic-0.9.21.jar
             logback-core-0.9.21.jar
             slf4j-api-1.6.x.jar

时间: 2024-11-05 18:25:19

log4j和logback的冲突导致日志输出异常的相关文章

Java学习-046-日志抓取合并后排序问题解决方案之 --- log4j 二次定制,实现日志输出添加延时10ms

自3月25至今,已经好久没有写学习日志了,今天在写日志抓取合并的小方法,发现抓取后的日志并米有依据系统执行的日志顺序排序.日志抓取排列逻辑如下: 通过日志标识,从各个日志文件(例如 use.log,error.log 等)中获取所需日志列表 合并日志列表 升序排序 输出日志报告 结果最后获取日志信息后,发现实际产出结果与预期结果不相符,如下所示: 1 2016-04-10 22:54:23,042 - INFO - [main] [cn.ffp.autotest.api.report.Repor

Java日志框架SLF4J和log4j以及logback的联系和区别

1.SLF4J(Simple logging Facade for Java) 意思为简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终日志的格式.记录级别.输出方式等都要通过接口绑定的具体的日志系统来实现,这些具体的日志系统就有log4j,logback,java.util.logging等,它们才实现了具体的日志系统的功能. 如何使用SL

log4j日志输出使用_1

转自https://www.cnblogs.com/sky230/p/5759831.html Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地以及日志信息的输出格式.Log4j除了可以记录程序运行日志信息外还有一重要的功能就是用来显示调试信息.很多程序员经常会使用System.out.println语句输出某个变量值的方法进行调试.这样会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.

Logback+ELK+SpringMVC搭建日志收集服务器

(转) 1.ELK是什么? ELK是由Elasticsearch.Logstash.Kibana这3个软件的缩写. Elasticsearch是一个分布式搜索分析引擎,稳定.可水平扩展.易于管理是它的主要设计初衷 Logstash是一个灵活的数据收集.加工和传输的管道软件 Kibana是一个数据可视化平台,可以通过将数据转化为酷炫而强大的图像而实现与数据的交互将三者的收集加工,存储分析和可视转化整合在一起就形成了 ELK . 2.ELK流程 ELK的流程应该是这样的:Logback->Logst

【Java】日志知识总结和经常使用组合配置(commons-logging,log4j,slf4j,logback)

Log4j Apache的一个开放源码项目,通过使用Log4j,我们能够控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等.用户也能够控制每一条日志的输出格式:通过定义每一条日志信息的级别,用户能够更加仔细地控制日志的生成过程.这些能够通过一个 配置文件来灵活地进行配置.而不须要改动程序代码. LOGBack Logback是由log4j创始人设计的又一个开源日记组件.logback当前分成三个模块:logback-cor

(转)log4j(二)——如何控制日志信息的输出?

一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 先看栗子再来下结论 import org.apache.log4j.*; import test.log4j.bean.Person; //by godtrue public class UseLog4j { //日志记录器 private static Logger LOGGER = LogManager.getLogger(UseLog4j.class); //循环次数 private static long

Log4j,Log4j2,logback,slf4j日志学习

日志学习笔记 Log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.数据库等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程. Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE.DEBUG.INFO.WARN.ERROR.FATAL.OFF.如果配置为OFF级别,表示关闭log. Log4j支持两种格式的配置文件:properties和xml.包含三

log4j(五)——如何控制不同目的地的日志输出?

一:测试环境与log4j(一)--为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; import java.io.*; public class UseLog4j { //日志记录器 private static Logger LOGGER = LogManager.getLogger(UseLog4j.class); //程序入口--主函数 public static void main(String[]a

Log4j将不同Package的日志输出到不同的文件

转自:http://www.crazyant.net/1931.html 随着项目规模的越来越大,会不断的引入新的模块,不同的模块都会打印自己的日志,最后就造成日志根本没法查看,比如我自己的项目中,就存在以下这些日志: 接收外界消息的日志.对外发送消息的日志: 后台常驻线程的处理日志: 外部接口访问的参数.返回结果等接口日志: Service访问数据库产生的SQL日志: 这其中,消息日志和后台线程的日志数据量非常庞大,如果所有日志打印在一个文件中,使用tail -f log.log文件,会发现日