irpas技术客

log4j和slf4j的区别_小道士写程序_slf4j和log4j区别

irpas 3259

一、log4j和slf4j的区别

log4j( log for java )(4 同 for) Apache的一个开源项目,可以灵活地记录日志信息,我们可以通过Log4j的配置文件灵活配置日志的记录格式、记录级别、输出格式,而不需要修改已有的日志记录代码。slf4j:simple log facade for java 简单日志门面 slf4j不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。 可以将log4j看成是一个完整的日志库,而slf4j是一个日志库的规范接口。

那么使用slf4j有什么好处呢?

1. 让日志和项目之间解耦

想象一下这种场景,目前我们的项目已经使用了log4j作为日志库,有一天我们引入了一个技术大牛编写的组件,但是这个组件使用的是logback来进行日志输出,那么问题就来了,我们就不得不需要添加两个实现同样功能的jar包并且维护两套日子配置。 而slf4j 是一个适配器,我们通过调用slf4j的日志方法统一打印我们的日志,而可以忽略其他日志的具体方法,这样,当我们的系统换了一个日志源后,不需要更改代码

2. 节省内存

log4j这些传统的日志系统里面并没有占位符的概念,当我们需要打印信息的时候,我们就不得不创建无用String对象来进行输出信息的拼接。

private void log4jTest(){ String errormsg = "something error happen..."; logger.info("错误信息为:"+errormsg); }

slf4j可以使用占位符,这样日志输出的时候就可以避免无用字符串对象的创建

private void slf4jTest(){ logger.info("错误信息为:{}","something error happen..."); }

二、在项目中使用slf4j

1. 在项目pom文件中引入

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.13</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.13</version> </dependency>

或者引入

<!-- 引入log4j日志依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> <version>1.3.8.RELEASE</version> </dependency>

2. 在类中使用LogFactory创建类的log对象

注意:一般来说,我们会用static、final关键字来对日志对象进行修饰。

设置为private是为了防止其他类使用当前类的日志对象;设置为static是为了让每个类中的日志对象只生成一份,日志对象是属于类的,不是属于具体的实例的;设置成final是为了避免日志对象在运行时被修改。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #slf4j和log4j区别 #Log #for #JAVA #4 #