1. 简介
日志对于任何一个Java应用程序,尤其是服务端程序是至关重要的,常用的如
- java.util.logging
- Apache log4j
- logback
- commons-logging 等。
但是上述各种日志的实现方式都是和各自的jar包强依赖的,也就是说耦合度太高。由于某种原因,一旦你要换种日志框架那就必须更改你代码中的各处和日志有关的代码。比如这种重复但又不得不写的代码:
logger.debug("...... " + string1 + "... " + int1);
同时slf4j支持更加高效且简洁的方式来输出日志信息:
logger.debug("...... {}... {}",string1,int1);
slf4j就像是jdbc一样进行了一次抽象,站在一个更高的角度进行日志记录,可以方便的在各种常用的日志框架之间转换而无需改变代码。也就是说slf4j(Simple logging Facade for Java)不是一个真正的日志实现,而是一个抽象层
2. 使用
(此处用log4j举例)
2.1 jar包
- slf4j-api-1.7.10.jar
- log4j-1.2.16.jar
- slf4j-log4j12-1.7.12.jar
2.2 配置文件
log4j.properties
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %m %c{1}:(%L) %d{ABSOLUTE} %n
#log4j.rootLogger=debug, stdout
log4j.rootLogger=info, stdout
log4j.logger.footmark=debug
2.3 java代码中使用
package test.slf4j;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
Logger logger = LoggerFactory.getLogger(Main.class);
@Test
public void test1() {
try {
logger.info("111");
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test2() {
try {
logger.info("id is {} .", 1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. 切换为其他框架
3.1 jdk风格
如果想切换到jdk14的log的风格,只需要把 log4j-1.2.16.jar和slf4j-log4j12-1.7.12.jar从classpath中移除,同时classpath中加入slj4j-jdk14-1.4.1.jar即可。
3.2 simple log风格
4. 总结
使用java,无论何时,都应该针对抽象编程而不是针对具体实现编程,slf4j就是一种对日志记录的抽象,它并不是一种具体实现。
欢迎纠错。