java日志系统问题总结

原创 2017年03月01日 23:52:00

摘要

本文主要讲述slf4j, jcl, logback, log4j2, log4j冲突问题。
适用场景为同时使用thrift, elasticsearch-client, 老内部库等第三方库造成日志管理难度问题。

日志系统介绍

首先总结java提供的日志系统,它包括:

- jul 全称java-utils-logging, jdk自带的日志系统)
- jcl 全称 apache commons-logging, 是apache commons集合中一个部分
- log4j 全称log for java。
- slf4j 全称 Simple logging facade for Java
- logback 它是log4j改良版
- log4j2 它是log4j的2.x版本

不同的第三方库因为其开始开发的年代不同,使用了不同的日志系统。
从而导致,使用这些第三方库时,需要对他们进行管理,统一管理或者各自管理各自的。

案例说明

最近开发的一个项目,服务框架使用apache thrift, 使用到了elasticsearch-client和一个内部库。
thrift使用的日志系统是slf4j, elasticsearch-client使用的日志系统是log4j2, 内部库使用的日志系统时jcl,老服务中使用的是logback。
这时维护四份日志的配置文件增加了服务的维护成本,解决的方案是,对日志系统进行桥接,统一维护。

进过查找资料发现:
从slf4j桥接到其它库的组件包括:

  • slf4j-jdk14:slf4j到jdk-logging的桥梁
  • slf4j-log4j12:slf4j到log4j1的桥梁
  • log4j-slf4j-impl:slf4j到log4j2的桥梁
  • logback-classic:slf4j到logback的桥梁
  • slf4j-jcl:slf4j到commons-logging的桥梁

从其它库桥接到slf4j库包括:

  • jcl-over-slf4j
  • log4j-over-slf4j
  • jul-to-slf4j

从其它库桥接到log4j2的库包括:

  • log4j-slf4j-impl 桥街skf4j到log4j2
  • log4j-jcl 桥街jcl到log4j2

解决方案

从当前情况而言,从slf4j,jcl,logback桥接到log4j2的成本较低.
添加log4j-slf4j-impl库和log4j-jcl 库,取出logback库的依赖。
由于logback的配置文件与log4j2的配置文件相近,因此可以平滑迁移。

修改pom文件, 添加下面内容:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
</dependency>
<dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-core</artifactId>
</dependency>
<dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-slf4j-impl</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jul</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
</dependency>

修改elasticsearch-client依赖为:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <exclusion>
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-api</artifactId> 
    </exclusion> 
    <exclusion> 
        <groupId>ch.qos.logback</groupId> 
        <artifactId>logback-classic</artifactId> 
    </exclusion>
    <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
    </exclusion>
</dependency>

修改thrift依赖为:

<dependency>
    <groupId>org.apache.thrift</groupId>
    <artifactId>libthrift</artifactId>
</dependency>
    <exclusion>
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-api</artifactId> 
    </exclusion> 
    <exclusion> 
        <groupId>ch.qos.logback</groupId> 
        <artifactId>logback-classic</artifactId> 
    </exclusion>
    <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
    </exclusion>
</dependency>

参考

logback->log4j2迁移
slf4j、jcl、jul、log4j1、log4j2、logback大总结
maven search for log4j2

相关文章推荐

Java知识总结----日志系统在项目中的应用(五)

现在的工作过程中,日志在项目中的角色越来越重要,环境出问题了,遇到bug了,我们都要从日志查起。所以在项目中记录日志就显得很重要。今天就跟大家简单聊聊如何在项目中引入日志。        现在市面上比...

log4j.jar java日志系统必须

  • 2012年09月28日 08:47
  • 364KB
  • 下载

ELK学习10_ELK系列--实时日志分析系统ELK 部署与运行中的问题汇总

前记: 去年测试了ELK,今年测试了Storm,最终因为Storm需要过多开发介入而放弃,选择了ELK。感谢互联网上各路大神,目前总算是正常运行了。 logstash+elasticsea...

请教,自己写的系统,运行是正常的,偶尔会爆这个问题,页面弹出Failed to read input窗口, 日志如下

用的是:java1.6.0+eclipse3.3+tomcat6.0java装在c盘,eclipse安装了myeclipse插件程序代码用的是struts2 spring2.5 ibatis2技术请高...
  • macq711
  • macq711
  • 2011年04月03日 01:27
  • 2890

Python:通过自定义系统级快捷键来控制程序开始或停止记录日志(使用小技巧解决一个貌似无解的问题)

在之前写的一篇《Python:监控键盘输入、鼠标操作,并将捕获到的信息记录到文件中》文章中,有个读者留言如下:     这看似一个很平常的需求,但实现起来并不容易,如果用快捷键来控制一个程序干些别...
  • dyx1024
  • dyx1024
  • 2012年03月10日 00:00
  • 6118

Windows日志定位系统性能问题

最近同事频繁抱怨生产应用反映慢。调查发现此应用部署在一台Windows服务器上。该windows机器内存使 用率并不高,但CPU使用率会频繁的周期性的冲高。查看该机器上部署的Apache和MySQL...

Android闪退,而且日志报系统自身错误或者异常位置没问题,你解决了吗?

朋友问我android应用闪退,而且报错的地方正确,问我怎么办? 作为有经验的程序员了,首先,我断定这肯定是异常捕获不了导致的闪退。所以请看下面我帮你。 我说你让我看看报错日志吧。发现的确有报...

fluent+mongodb搭建日志系统中的几个问题

1.运行时如下错误, error="Unknown output plugin 'mongo'. Run 'gem search -rd fluent-plugin' to find plugins...

关于windows IIS日志时间与系统时间相差8小时的问题

很多做过网站的朋友在分析IIS日志的时候会发现IIS日志的时间与计算机的系统时间不符,比如在中国时区就会相差8小时。具体原因是什么呢?网 上搜索的结果十有八九让人做如下操作解决: 在IIS日志属性“...

KafKa+Logstash+Elasticsearch日志收集系统的吞吐量问题

公司的KafKa+Logstash+Elasticsearch日志收集系统的吞吐量存在问题,logstash的消费速度跟不上,造成数据堆积; 三者的版本分别是:0.8.2.1+1.5.3+1.4.0 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java日志系统问题总结
举报原因:
原因补充:

(最多只允许输入30个字)