SLF4j----Simple Logging Facade for Java:简单日志门户。是一种JCL体系。类似于apache commons Logging,但是比commons logging使用更方便,更为强大。它是由Log4j的作者开发的,还有用于取代log4j的logback.
使用SLF4J,通常由两种组合SLF4J+Log4j; SLF4J+logback,目前推荐的是SLF4J+logback.不过对于习惯使用log4j的我们也可以使用SLF4J+log4j.
同时SLF4J还支持android日志操作。
SLF4J的体系:SLF4J-api,然后调用具体实现的包装库wrapper如:slf4j-log4j12-1.7.7.jar然后是调用具体的实现如Log4j-1.2.jar.所以通常我们需要导入这三个库。
使用SLF4J:的明显好处:
1.参数化日志书写形式:通过占位符{}来参数化:
参数化对象
Object entry = new SomeObject();
logger.debug("The entry is {}.", entry);
参数化一个或多个字符串:logger.debug("The new entry is {}.", entry);
logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);
关于输出{}相关问题转义等:logger.debug("Set {1,2} differs from {}", "3");
输出"Set {1,2} differs from 3".
logger.debug("Set {1,2} differs from {{}}", "3");
输出"Set {1,2} differs from {3}".
logger.debug("Set \\{} differs from {}", "3");
输出 "Set {} differs from 3".
2.使用参数化方法。可以避免书写 isDebugEnabled,isInfoEnabled等方法。但是不使用参数化方法时还得看情况书写。以下摘自slf4j-log4j12.jar中的源代码,看看就知道为什么会有这个有点和区分了:
摘自slf4j-log4j12.jar中的源代码 非参数化方法: public void debug(String msg) { logger.log(FQCN, Level.DEBUG, msg, null); } 参数化方法: public void debug(String format, Object arg) { if (logger.isDebugEnabled()) {//参数化方法会自动判断log4j配置文件是否允许debug,如若不允许则直接忽略。 FormattingTuple ft = MessageFormatter.format(format, arg); logger.log(FQCN, Level.DEBUG, ft.getMessage(), ft.getThrowable()); } }好了,不多说。
需要导入的库:slf4j-api.jar,log4j-1.2.jar,slf4j-log4j12-1.7.7.jar通常还推荐加上slf4j-simple-1.7.7.jar这个默认的实现,以便在没有其他实现时不至于抛出异常。
使用SLF4j,它会自动寻找classpath路下的实现库,所以我们无须进行配置,但是log4j的配置文件log4j.properties还是要有的。
注意,为了避免冲突,classpath下只能有一种实现。否则将出现意想不到的的问题。
maven集成:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
主要使用的API:Logger,LoggerFactory,
使用实例:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } }参考:http://www.slf4j.org/faq.html#logging_performance
http://www.importnew.com/7450.html
http://singleant.iteye.com/blog/934593
SLF4J与Log4j整合使用,布布扣,bubuko.com
原文:http://blog.csdn.net/xby1993/article/details/23610805