Java日志commons-logging log4j slf4j之间的关系

一、之前进行日志操作一般都是在一个类中加入如下代码:

import org.apache.log4j.Logger;
//引入的是log4j的包
private static final Logger LOG = Logger.getLogger(Test.class);

二、后来看见别人的代码是这样写的:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
//引入的是commons-logging的包
private static Log logger = LogFactory.getLog(AccountAction.class);

三、后来想起使用log4j要把mybatis的sql语句输出还需要添加slf4j-api-x.x.x.jar和slf4j-log4j12-x.x.x.jar两个包。看到这么多日志,乱七八糟的,所以就度娘了一下,稍微的了解了下这些日志之间的关系。这里顺便给出个人较为肤浅的总结,看官有更好的理解可以留言,大家一起学习进步。

1)commons-logging和slf4j-api

这两个日志包,都是提供出一个标准接口。类似于JDBC一样,给出一个接口,具体怎么实现你们自己去玩。不同点在于commons-logging自己有一个简单的实现。所以,在(二)的代码中,如果引入了commons-logging没有引入log4j的架包的话,日志能正常打印,打印效果如下:

如果加入log4j的架包的话(需要配置log4j.properties或者log4j.xml),日志效果如下:

简单而言,commons-logging会先去查找commons-logging.properties配置文件,查找指定的实现日志,如果没有,默认去查找log4j(毕竟都是自家做的东西嘛),如果没有指定,也没有找到log4j的架包实现,那么,commons-logging就自己上,结果就是图片一中的效果。而slf4j就没有默认实现。

2、slf4j-api和slf4j-log4j12

slf4j-api和commons-logging的接口肯定存在不一致的地方。有的日志实现可能没有遵照slf4j-api的接口来,所以,中间转换一层。所以slf4j-log4j12就是一个类似于一个转换器的味道。这里转换之后使用的是log4j。当然还有其他的,比如sli4j-slf4j-logback。

四、总结

1)自己的项目使用建议引入commons-logging和log4j两个架包,然后使用(二)中的代码;

2)有的项目使用的可能是slf4j,比如mybatis,如果还要继续使用log4j就需要在引入slf4j-log4j12;

3)即使用log4j两个组合:【commons-logging+log4j】和【slf4j+slf4j-log4j12+log4j】;

本文只针对log4j,其他的开源日志未涉及。菜鸟的见解,大牛勿喷。

时间: 2024-12-21 22:50:14

Java日志commons-logging log4j slf4j之间的关系的相关文章

commons-logging \ log4j \ slf4j 之间的关系

最近的一个web项目中要使用到日志,但是对常用的日志记录工具(框架)着实不是很理解,在此mark一下. 1.commons-logging.jar common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库.当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱.所以使

Java日志管理:log4j、Commons-logging、slf4

1.log4j 概述 log4j是Apache的一个开源项目,主要是用来做Java开发中的日志管理工作.主要是由三个重要组件构成的.可管理日志的优先级.输出目的地以及输出格式等.它的配置文件主要有XML和properties两种,当然,也可以在程序里配置,但实际开发中一般使用properties文件. log4j的组件 1.1.日志信息的优先级(Level) 有7个日志级别:OFF.FATAL.ERROR.WARN.INFO.DEBUG.ALL,级别从做到有一次降低. Off:关闭所有的日志记录

java 日志技术汇总(log4j , Commons-logging,.....)

前言 在java 中实现记录日志的方式有很多种, 1. 最简单的方式,就是system.print.out ,err 这样直接在控制台打印消息了. 2. java.util.logging ; 在JDK 1.4 版本之后,提供了日志的API ,可以往文件中写日志了. 3. log4j , 最强大的记录日志的方式. 可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等. 4. commons-logging, 最综合和常见的日志记录方式, 经常是和log4j

java中的面向对象和类之间的关系

1.面向对象 a.分析问题中需要用到哪些类以及对象 b.分析以上类中或对象中应该具有哪些属性及方法 c.分析类之间的关系 (合适的方法应该出现在合适的类中) 2.举例:模板-实物 a.白板笔 b.员工(年龄.姓名.性别.工作岗位) (显示姓名,年龄,修改姓名,修改年龄,变更工作岗位) (区分对象:一般通过方法是无法区分对象的,通过属性可以区分对象) 3.类与对象 a.类是具有共同特征的一类事物的一个抽象 b.对象是这个类具体的某一个实例 4.类(对象)之间的4种关系 a.依赖关系(Depende

Java日志介绍(2)-Log4j

Log4j是Apache的一个开源项目,官网地址为http://logging.apache.org/log4j/1.2/index.html.通过使用Log4j,可控制日志信息输出到控制台.文件.数据库等不同的地方:可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,可以更加细致的控制日志的生成过程.Log4j是曾经风靡一时的日志框架,但现在逐渐被新的日志框架所取代:Log4j2.logback.本文主要介绍下Log4j的使用方法,文中所使用到的软件版本:Java 1.8.0_191.

java的集合类有哪些他们之间的关系有什么区别

Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下: Collection<--List<--Vector    数组实现 查询快.增删慢 Collection<--List<--ArrayList  数组实现 查询快.增删慢Collection<--List<--LinkedList  链表结构 查询慢.增删快Collection<--Set<--HashSet 自定义排序 对对象实现Comparable 重写com

Java中JDK,JRE和JVM之间的关系

初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也就是常常听到Java虚拟机.JDK是面向开发者的,JRE是面向使用JAVA程序的用户,上面只是简单的区别,一般网上好多都讲概念,我就不讲了,直接截图应该会更清晰一点,我安装的JDK1.8,效果如图: JDK和J

java学习之Java中JDK,JRE和JVM之间的关系(转载)

最近要重新抓一下java,大量扫技术文档,保存下来供自己查阅.以下转载自http://www.cnblogs.com/xiaofeixiang/p/4085159.html 初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也就是常常听到Java虚拟机.JDK是

Java 中判断类和实例之间的关系

判断类与实例的关系有以下三种方式 1.instanceof关键字,用来判断对象是否是类的实例 (对象 => 类 )   2.isAssignableFrom,用来判断类型间是否存在派生关系 (类 = > 类)   3.isInstance方法,用来判断对象是否属于某个类型的实例 (类 => 对象 //use instanceof,用来判断对象是否是类的实例 System.out.println(new A() instanceof B);//类型比较 //use isAssignable