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 |
相关推荐
"logback-slf4j日志配置文件下载即可使用" logback-slf4j是Java领域中一种常用的日志记录解决方案,它通过结合slf4j(Simple Logging Facade for Java)来提供了异步日志输出的功能,能够将日志输出到不同的文件中...
SLF4J支持自定义日志输出格式,例如使用PatternLayout在Log4j中配置 `%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n`,输出日期、优先级、类名、行号和消息。 **7. 异常处理** SLF4J允许直接传递异常对象给日志...
处理slf4j日志使用的基本错误,导入三个包,分别是slf4j-impl,slf4j-api和slf4j-log4j12
Springboot 项目使用 Slf4j 将日志保存到本地目录的实现代码 Slf4j 是一个 Java 日志记录门面,它提供了一个通用的日志记录API,允许开发者使用不同的日志记录框架,例如 Logback、Log4j 等。在 Springboot 项目中...
在使用SLF4J之前,首先需要在项目的类路径中包含SLF4J的API jar包以及一个具体的日志实现库,例如Logback或Log4j。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <!-- SLF4J API --> <groupId>...
5. **NoBinding**: 如果没有找到合适的日志实现,SLF4J会使用一个名为NoBinding的日志绑定,它会在控制台输出警告信息,提醒用户未正确配置日志实现。 SLF4J源码中值得关注的部分包括: 1. **Logger接口**: 定义了...
SLF4J(Simple Logging Facade for Java)是一个用于Java编程语言的日志门面框架,它提供了一个简单的抽象层,用以使用各种日志框架,例如java.util.logging、logback和log4j。门面模式的好处在于,开发者可以在不同...
**Slf4j日志框架详解** Slf4j(Simple Logging Facade for Java)是一个用于日志系统的简单 facade,它允许最终用户在部署他们的应用时使用他们希望的日志库。Slf4j提供了一个统一的API,使得开发人员能够在不更换...
SLF4J(Simple Logging Facade for Java)是Java中一个用于日志记录的抽象层,它提供了一种标准的日志记录接口,使得开发者可以选择不同的日志实现框架,如Log4j、Logback等。MongoDB则是一个流行的NoSQL数据库系统...
- **可移植性**: 使用SLF4J,开发者可以在不修改代码的情况下更换日志框架,只需更改依赖的JAR文件即可。 - **灵活性**: SLF4J允许动态配置日志实现,可以根据运行环境的需要选择合适的日志系统。 - **无侵入性**: ...
今天,我们将讨论如何将 Log4j2 结合 Slf4j 配置使用,以便更好地记录和管理日志。 首先,我们需要下载 Log4j2 和 Slf4j 的 jar 文件。Log4j2 的下载地址是 http://logging.apache.org/log4j/2.x/download.html,...
使用Slf4j集成Log4j2构建项目日志系统的完美解决方案 Slf4j是简单的日志外观(Facade)模式,它提供了统一的日志接口,使得用户可以选择不同的日志实现。Slf4j的出现使得日志系统的开发变得更加灵活和便捷。Log4j2...
slf4j-log4j12-1.7.x版本是SLF4J针对Log4j 1.2版本的绑定器,它使得应用可以使用SLF4J接口,但实际的日志输出通过Log4j进行。这个桥接器让项目能利用SLF4J的灵活性,同时使用Log4j的成熟实现。 在提供的文件名列表...
4. **编写日志代码**:在Java代码中,使用SLF4J的LoggerFactory获取Logger对象,然后调用相应级别的方法记录日志。 **日志框架的比较:** 1. **Log4j**:老牌的日志框架,功能强大,但配置相对复杂。SLF4J的一个...
标题中的"slf4j-log4j12-1.7.12.jar"是SLF4J的一个绑定包,它的作用是将SLF4J API与log4j日志框架连接起来。具体来说,这个版本(1.7.12)的绑定包实现了SLF4J的API,并将其桥接到log4j的实现上,使得开发者可以通过...
在某些场景下,比如测试环境中,你可能希望避免日志带来的额外开销,此时使用slf4j-nop.jar就非常合适。 标签"slf4j"直接指出了这个压缩包的主题,它是与SLF4J相关的资源。 压缩包内的文件名称列表中,"slf4j-api-...
3. `slf4j-log4j12-1.6.6.jar`:此文件是Slf4j与Log4j之间的适配器,允许Slf4j的日志调用被Log4j日志系统处理。Log4j是一款功能强大的日志框架,提供丰富的配置选项和多种日志输出方式,如文件、控制台、SMTP邮件等...
`slf4j-log4j12-1.7.12.jar` 文件是SLF4J的一个绑定实现,它将SLF4J接口绑定到Log4j日志系统。这意味着,当你在项目中引入这个JAR,SLF4J的日志调用会通过这个绑定转发到Log4j进行处理。Log4j是Apache的一个开源项目...
虽然SLF4J不直接使用Log4j,但可以通过桥接器将SLF4J的调用转发到Log4j,这样可以利用Log4j的高级特性,如自定义日志级别、日志文件滚动、过滤器和布局模板等。不过,在Android中直接使用Log4j并不常见,因为它的...
压缩包中的`jcl-over-slf4j-1.5.10-sources.jar`是一个桥接器,它的作用是将使用Jakarta Commons Logging(JCL)的日志调用重定向到SLF4J。这是因为一些老的库可能使用了JCL,但SLF4J并不直接支持它,所以引入这个桥...