java日志系统问题总结

摘要

本文主要讲述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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java系统预警系统技术搭建主要包括以下几个步骤: 1.需求分析:首先需要明确预警系统的功能和需求,确定系统需要监测的对象和预警条件。例如,是监测网络安全事件还是监测系统运行状况等。 2.数据采集:系统需要采集相关数据以进行预警分析。可以通过网络爬虫、传感器、日志文件等方式进行数据采集。 3.数据存储:采集到的数据需要进行存储,以便后续预警分析。可以选择使用关系数据库、文件系统或者分布式存储系统等进行存储。 4.数据分析与建模:对采集到的数据进行分析和建模,以确定预警的规则和条件。可以使用机器学习、数据挖掘等技术来进行数据分析和建模。 5.预警策略设计:根据需求和分析结果,设计预警策略。包括预警条件的设置、预警级别的定义等。 6.预警通知与展示:系统需要实现预警通知的功能,可以通过邮件、短信、微信等方式发送预警信息给相关人员。同时还需要提供预警信息的展示界面,便于用户查看和处理。 7.系统集成与部署:将设计好的预警系统集成到目标系统中,并进行部署。需要注意与原有系统的数据交互、权限控制等问题。 8.系统测试与优化:对预警系统进行功能测试和压力测试,确保系统稳定可靠。同时根据用户的反馈进行系统的优化和改进。 总结:通过以上的技术搭建步骤,可以建立一个基于Java系统预警系统。这个系统可以根据需求实时监测相关数据,进行分析和建模,通过预警通知及时提醒用户,帮助用户避免潜在的风险和问题。同时,通过系统测试和优化,保证预警系统的准确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值