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

学生信息管理系统问题总结(一)

学生管理系统已经敲完有两天了,
  • u013046597
  • u013046597
  • 2014年07月29日 10:13
  • 1150

java 日志框架总结

简介 commons-logging(jcl) : apache 提供的日志框架接口,spring 默认使用的框架接口。现在已经很久没有更新了。 slf4j : 也是一种日志框架接口,可以自由的选择具...
  • u013475071
  • u013475071
  • 2017年03月17日 17:06
  • 269

java中的常见异常总结

作者:未知 转载至:http://blog.csdn.net/taijianyu/article/details/11634881 算术异常类:ArithmeticExecption   空指针异...
  • qq_34731574
  • qq_34731574
  • 2017年03月16日 17:04
  • 545

日志总结-Java内部类

学习内容: 一、专业课 内部类: 类里面包含类 外层的类:叫做外部类 内层的类:叫做内部类   按照内部类出现的位置,可分为几类:   1.在成员位置上时,叫做成员内部类(普通成员内部类,静态内...
  • lgw311309010217
  • lgw311309010217
  • 2017年03月22日 23:22
  • 147

大数据系统问题总结

1当组件多了多个jvm实例,每个实例可分多少内存多少合适是个问题,如何统一的管理这些jvm实例 2涉及的问题异常逐步深入 从系统本身-》jvm->linux都可能报问题,当然硬件的电脑和网线网络问题都...
  • gao8658
  • gao8658
  • 2013年11月07日 14:21
  • 985

推荐系统问题总结

参考:http://www.cnblogs.com/porco/p/4421503.html 冷启动问题 定义:在开始阶段,没有大量用户数据的情况下,进行个性化推荐的问题。 ...
  • xbmatrix
  • xbmatrix
  • 2017年03月12日 00:31
  • 220

-日志- Fastjson 总结

Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。 public static final Object...
  • lgw311309010217
  • lgw311309010217
  • 2017年04月10日 00:20
  • 326

机房收费系统问题总结(一)

一、 出错原因:vb工程引用的某个文件丢失,从而引起其他莫名其妙的错误。解决办法:打开工程菜单-引用...,在弹出的窗口中查看那些打钩的条目。如果出现某条目丢失的文字提示,请补上注册相应...
  • bianyamei
  • bianyamei
  • 2015年07月27日 21:12
  • 482

学生信息系统问题总结

是txtSQL = “SELECT*from user_Info whereuser_ID=””& txtUserName.Text&””’这句话的问题,发现我把单引号打成了双引号 1刚敲完的时候总是...
  • Zhang_0507
  • Zhang_0507
  • 2017年08月10日 11:33
  • 295

学习系统工程学的总结

前一段时候我有幸发现了一门很经典的学科,叫做《系统工程学》,我上网找一些有关的资料,还去书店买了一本书,通看书和阅读资料,加上一段时间的思考,让我感到受益非浅。它让我在现有的知识储备中建立起一个高度抽...
  • lishu1980
  • lishu1980
  • 2007年10月22日 17:40
  • 2236
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java日志系统问题总结
举报原因:
原因补充:

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