`
dyy_gusi
  • 浏览: 209422 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

slf4j日志的使用

阅读更多

 

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

 

 

  • 大小: 124.3 KB
3
2
分享到:
评论
2 楼 huaerfan 2014-09-20  
一直在使用,没有具体了解过。多谢科普
1 楼 asialee 2014-09-20  
总结的不错,在实际项目开发过程中,看到有的人log4j、slf4j经常用混,还有logback,现在应该logback用的多一点。

相关推荐

    logback-slf4j日志配置文件-下载即可使用

    "logback-slf4j日志配置文件下载即可使用" logback-slf4j是Java领域中一种常用的日志记录解决方案,它通过结合slf4j(Simple Logging Facade for Java)来提供了异步日志输出的功能,能够将日志输出到不同的文件中...

    slf4j完整日志文件

    SLF4J支持自定义日志输出格式,例如使用PatternLayout在Log4j中配置 `%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n`,输出日期、优先级、类名、行号和消息。 **7. 异常处理** SLF4J允许直接传递异常对象给日志...

    SLF4J日志报错解决办法

    处理slf4j日志使用的基本错误,导入三个包,分别是slf4j-impl,slf4j-api和slf4j-log4j12

    Springboot项目使用Slf4j将日志保存到本地目录的实现代码

    Springboot 项目使用 Slf4j 将日志保存到本地目录的实现代码 Slf4j 是一个 Java 日志记录门面,它提供了一个通用的日志记录API,允许开发者使用不同的日志记录框架,例如 Logback、Log4j 等。在 Springboot 项目中...

    非web工程使用slf4j输出日志

    在使用SLF4J之前,首先需要在项目的类路径中包含SLF4J的API jar包以及一个具体的日志实现库,例如Logback或Log4j。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <!-- SLF4J API --> <groupId>...

    slf4j日志框架的源代码分享

    5. **NoBinding**: 如果没有找到合适的日志实现,SLF4J会使用一个名为NoBinding的日志绑定,它会在控制台输出警告信息,提醒用户未正确配置日志实现。 SLF4J源码中值得关注的部分包括: 1. **Logger接口**: 定义了...

    SLF4j中文使用手册

    SLF4J(Simple Logging Facade for Java)是一个用于Java编程语言的日志门面框架,它提供了一个简单的抽象层,用以使用各种日志框架,例如java.util.logging、logback和log4j。门面模式的好处在于,开发者可以在不同...

    Slf4j日志相关jar包

    **Slf4j日志框架详解** Slf4j(Simple Logging Facade for Java)是一个用于日志系统的简单 facade,它允许最终用户在部署他们的应用时使用他们希望的日志库。Slf4j提供了一个统一的API,使得开发人员能够在不更换...

    slf4j日志,可以使用它代替LOG4J

    - **可移植性**: 使用SLF4J,开发者可以在不修改代码的情况下更换日志框架,只需更改依赖的JAR文件即可。 - **灵活性**: SLF4J允许动态配置日志实现,可以根据运行环境的需要选择合适的日志系统。 - **无侵入性**: ...

    Log4j2结合Slf4j配置使用

    今天,我们将讨论如何将 Log4j2 结合 Slf4j 配置使用,以便更好地记录和管理日志。 首先,我们需要下载 Log4j2 和 Slf4j 的 jar 文件。Log4j2 的下载地址是 http://logging.apache.org/log4j/2.x/download.html,...

    使用Slf4j集成Log4j2构建项目日志系统的完美解决方案.docx

    使用Slf4j集成Log4j2构建项目日志系统的完美解决方案 Slf4j是简单的日志外观(Facade)模式,它提供了统一的日志接口,使得用户可以选择不同的日志实现。Slf4j的出现使得日志系统的开发变得更加灵活和便捷。Log4j2...

    log4j + slf4j-api + slf4j-log4j12

    slf4j-log4j12-1.7.x版本是SLF4J针对Log4j 1.2版本的绑定器,它使得应用可以使用SLF4J接口,但实际的日志输出通过Log4j进行。这个桥接器让项目能利用SLF4J的灵活性,同时使用Log4j的成熟实现。 在提供的文件名列表...

    slf4j jar包

    4. **编写日志代码**:在Java代码中,使用SLF4J的LoggerFactory获取Logger对象,然后调用相应级别的方法记录日志。 **日志框架的比较:** 1. **Log4j**:老牌的日志框架,功能强大,但配置相对复杂。SLF4J的一个...

    slf4j-log4j12-1.7.12.jar、slf4j-api-1.7.12.jar

    标题中的"slf4j-log4j12-1.7.12.jar"是SLF4J的一个绑定包,它的作用是将SLF4J API与log4j日志框架连接起来。具体来说,这个版本(1.7.12)的绑定包实现了SLF4J的API,并将其桥接到log4j的实现上,使得开发者可以通过...

    slf4j-api.jar和slf4j-nop.jar打包下载

    在某些场景下,比如测试环境中,你可能希望避免日志带来的额外开销,此时使用slf4j-nop.jar就非常合适。 标签"slf4j"直接指出了这个压缩包的主题,它是与SLF4J相关的资源。 压缩包内的文件名称列表中,"slf4j-api-...

    Java Slf4j依赖包

    3. `slf4j-log4j12-1.6.6.jar`:此文件是Slf4j与Log4j之间的适配器,允许Slf4j的日志调用被Log4j日志系统处理。Log4j是一款功能强大的日志框架,提供丰富的配置选项和多种日志输出方式,如文件、控制台、SMTP邮件等...

    slf4j-api-1.7.12.jar slf4j-log4j12-1.7.12.jar

    `slf4j-log4j12-1.7.12.jar` 文件是SLF4J的一个绑定实现,它将SLF4J接口绑定到Log4j日志系统。这意味着,当你在项目中引入这个JAR,SLF4J的日志调用会通过这个绑定转发到Log4j进行处理。Log4j是Apache的一个开源项目...

    android slf4j log4j日志框架

    虽然SLF4J不直接使用Log4j,但可以通过桥接器将SLF4J的调用转发到Log4j,这样可以利用Log4j的高级特性,如自定义日志级别、日志文件滚动、过滤器和布局模板等。不过,在Android中直接使用Log4j并不常见,因为它的...

    slf4j输入日志到mongodb

    SLF4J(Simple Logging Facade for Java)是Java中一个用于日志记录的抽象层,它提供了一种标准的日志记录接口,使得开发者可以选择不同的日志实现框架,如Log4j、Logback等。MongoDB则是一个流行的NoSQL数据库系统...

    slf4j最新jar包下载和jar包

    压缩包中的`jcl-over-slf4j-1.5.10-sources.jar`是一个桥接器,它的作用是将使用Jakarta Commons Logging(JCL)的日志调用重定向到SLF4J。这是因为一些老的库可能使用了JCL,但SLF4J并不直接支持它,所以引入这个桥...

Global site tag (gtag.js) - Google Analytics