SLF4J
SLF4J(SimpleLogging Facade for Java) 是一个通用的日志框架,相当于日志框架中的一套规范,有时候我们希望在开发的时候不理会具体的框架,而在程序部署的时候再来选择具体的日志实现,这时候,我们可以考虑使用SLF4J,使用SLF4J开发的程序,在部署时可以选择以下日志框架中的任意一种:
1、 log4J 2、 java.util.logging 3、 nop 4、 slf4j-simple 5、 jcl(Jakarta commons logging) |
下面我介绍一下常见的两种搭配:SLF4J+Log4J和SLF4J+JCL
一、下面先演示一下:SLF4J+Log4J
1.1、需要的配置文件和组件包
下面三个 jar文件和一个 properties文件都是要放在项目的 ClassPath上。
1. slf4j-api-1.7.5.jar 【slf4j的抽象包,类似于接口】
2. slf4j-log4j12-1.5.11.jar 【适配器包,告诉slf4j日志的具体实现组件是谁】
3. log4j-1.2.15.jar 【日志实现包:log4j】
4. log4j.properties(也可以是 log4j.xml,本例中用 log4j.propertes)【log4j的配置文件】
1.2、log4j.properties
log4j.rootLogger=DEBUG,A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r%-5p[%t]%3x-%m%n%d{yyyy-MM-ddHH\:mm\:ss}%l |
1.3、使用 SLF4J 的代码:
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
publicclass SLFJTest { privatestaticfinal Loggerlogger = LoggerFactory.getLogger(SLFJTest.class);
publicstaticvoid main(String[] args) { //SLF4J是支持参数化的,用{}表示参数 logger.info("this is debug {}-{}","中国","你好"); } } |
1.4、执行它,控制台输出:
0 INFO [main] - this is debug中国-你好 2014-05-04 16:35:55 com.camelotchina.slfj.SLFJTest.main(SLFJTest.java:11) |
二、演示一下SLF4J+JCL(Java Commons logging)
1.1、需要的包
1. slf4j-api-1.7.5.jar 【slf4j的抽象包,类似于接口】
2. slf4j-jcl-1.6.0.jar 【适配器包,告诉slf4j日志的具体实现组件是谁】
3. Commons-logging-1.1.3.jar 【日志实现包:apache的commons-logging】
1.2、SLF4J代码
这个代码跟SLF4J+Log4J的是一样的
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
publicclass SLFJTest { privatestaticfinal Loggerlogger = LoggerFactory.getLogger(SLFJTest.class);
publicstaticvoid main(String[] args) { //SLF4J是支持参数化的,用{}表示参数 logger.info("this is debug {}-{}","中国","你好"); } } |
1.3、输出
2014-5-4 16:55:51 com.camelotchina.slfj.SLFJTest info 信息: this is debug中国-你好 |
从上面的演示中我们就可以体会到使用SLF4J的好处了,那就是,不管你底层的日志实现是什么组件,是log4j还是java.util.logging、还是logback,都不要紧,如果你采用SLF4J,那么,一旦你底层的日志组件改变,只需要在适配器包之间进行切换即可,代码是不需要做任何改变的。类似于面向接口编程了。