slf4j日志的使用
slf4j(simple logging facade for java)是Java的简单的日志门面,它不是具体的日志解决方案,它只服务于各种各样slf4j-logo的日志系统。这里的slf4j-logo可以是log4j,可以是jdk的日志,可以是logback,还可以是slf4j-simple等等。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。这里其实用到了一种设计模式(Facade设计模式,门面设计模式)。如下图:
实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算用那个具体的日志系统。只需要在项目中加入定的slf4j-logo.jar包就可以。这个和Spring的IOC思想有点像,想用哪个就用哪个,随意切换。
使用slf4j这种记录日志的方式的特点很明显:1、如果我们需要记录的是底层类库或者组件这种东西,就可以不影响或强制要求用户选择哪种日志系统。2、如果我们用特定的日志系统写了代码,但是有一天要求换另一种日志系统,如果之前就用slf4j的api写的,那就很简单,但是如果用具体的一种方式写了以后,那在切换就很麻烦。
在代码中的使用示例:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Slf4jTest { // 首先获得日志记录这个对象 static private Logger logger = LoggerFactory.getLogger(Slf4jTest.class); public static void main(String[] args) { // 记录error信息 logger.error("[info message]"); // 记录info,还可以传入参数 logger.info("[info message]{},{},{},{}", "abc", false, 123, new Slf4jTest()); // 记录deubg信息 logger.debug("[debug message]"); // 记录trace信息 logger.trace("[trace message]"); System.out.println("hello world"); } }
具体使用哪种日志系统,这个可以随意切换,演示如下:
1、使用slf4j的simple日志系统:
在classpath中加入:slf4j-simple.jar,运行程序输入如下:
[main] ERROR com.swu.gusi.Slf4jTest - [info message] [main] INFO com.swu.gusi.Slf4jTest - [info message]abc,false,123,com.swu.gusi.Slf4jTest@503f0b70 hello world |
2、切换成jdk的日志系统:
在classpath中将slf4j-logo.jar换成slf4j-jdk.jar,运行程序如下:
九月 20, 2014 12:33:52 下午 com.swu.gusi.Slf4jTest main 严重: [info message] 九月 20, 2014 12:33:52 下午 com.swu.gusi.Slf4jTest main 信息: [info message]abc,false,123,com.swu.gusi.Slf4jTest@400da341 hello world |
3、切换成log4j的日志系统:
在classpath中将slf4j-logo.jar换成slf4j-log4j.jar,注意这在使用log4j的时候,需要自己配置log4j.properites文件或者log4j.xml。至于log4j的使用查阅其他文档。
http://dyygusi.iteye.com/blog/2118833
4、切换成其他的日志系统和上面相同。
5、如果classpath中有多种日志系统,会怎么样呢。会提示类似如下信息(最好别这样搞):
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/E:/Repository/org/slf4j/slf4j-simple/1.7.7/slf4j-simple-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/E:/Repository/org/slf4j/slf4j-jdk14/1.7.7/slf4j-jdk14-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory] [main] ERROR com.swu.gusi.Slf4jTest - [info message] [main] INFO com.swu.gusi.Slf4jTest - [info message]abc,false,123,com.swu.gusi.Slf4jTest@10e80317 hello world |
相关推荐
处理slf4j日志使用的基本错误,导入三个包,分别是slf4j-impl,slf4j-api和slf4j-log4j12
主要介绍了Springboot项目使用Slf4j将日志保存到本地目录的实现方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
基于slf4j的完整资源
logback+slf4j 异步日志输出到不同级别的文件-配置文件,下载即可使用。结合lombok【@slf4j】即可方便愉快的输出日志了 666
slf4j slf4j slf4j日志。日志系统,代替LOG4J,可以去网上搜下使用方法。十分简单有效
Slf4j日志相关jar包 包含log4j Slf4j jboss-logging commons-logging
非web工程使用slf4j输出日志 非web工程使用slf4j输出日志 非web工程使用slf4j输出日志
slf4j源码,可供参考学习,有兴趣的同学可以自行了解一下
slf4j日志demo项目 logback.xml配置详解,slf4j日志demo项目 logback.xml配置详解,slf4j日志demo项目 logback.xml配置详解,slf4j日志demo项目 logback.xml配置详解
分享我写的彩色控制台日志组件-基于slf4j-simple改造。 有颜色、最简单/全面的log内容、最佳的性能,能够定制所有的内容,所以我写了一个彩色控制台log的java组件。 原创不易多多支持。
slf4j日志级别有五种:ERROR、WARN、INFO、DEBUG、TRACE,级别从高到底 其示例中取warn级别及写入数据库配置:database 三、配置文件db.properties、log4j.properties两个配置文件可以通过servlet配置来使用,也...
使用Slf4j集成Log4j2构建项目日志系统的完美解决方案.docx
因此,slf4j入口就是众多接口的集合,他不负责具体的日志实现,只在编译时负责寻找合适的日志系统进行绑定。具体有哪些接口,全部都定义在slf4j-api中。查看slf4j-api源码就可以发现,里面除了public final class ...
从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样...
SLF4J作为目前流行的日志框架的讲解和分享。很多开源项目都已引入。这里对其做了入门的讲解和分享。
从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样...
android里的日志框架,很好用,slf4j,附有用例。
在另一方面,如果是一个简单或者独立的应用,确定只有一种日志系统,那么就没有使用SLF4J的必要。假设你打算将你使用log4j的产品卖给要求使用JDK 1.4 Logging的用户时,面对成千上万的log4j调用的修改,相信这绝对...
log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码,
一个简单的例子slf4j实现热加载日志级别