目录
Slf4j
Slf4j的简单使用
Slf4j的日志绑定流程
Slf4j桥接器
Slf4j
Slf4j又称简单日志门面,Slf4j主要是为了给Java日志访问提供一套标准,规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他的日志框架。
Slf4j的简单使用
Slf4j本身也提供一个简单的日志系统,但通常不用。通常slf4j与其他日志框架绑定使用。
Slf4j的出现时间比Log4j与JUL晚,因此它们两个的接口没有根据Slf4j的文档来,因此需要多引入一个适配器来使用。像logback等日志框架出现较晚,根据Slf4j的接口实现,因此直接引入该框架就好。
下面使用JUL来测试Slf4j。引入下列依赖包。
<dependencies>
<!--日志门户-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
测试
public final static Logger logger = LoggerFactory.getLogger(TestSlf4j.class);
@Test
public void testJUL() throws Exception {
logger.error("error");
logger.info("info");
logger.debug("debug");
logger.trace("trace");
}
Slf4j的日志绑定流程
- 添加slf4j-api的依赖
- 使用slf4j的API在项目中进行统一的日志管理
- 绑定具体的日志实现框架(JUL与Log4j需要引入适配器依赖)
- slf4j有且仅有一个日志实现框架,如果有多个默认使用第一个
Slf4j桥接器
当项目初始时使用了Log4j日志框架时,后续项目扩展需要换logback日志框架,如果只是单纯的更换依赖,则仍需要修改代码。此时我们就需要使用桥接器来解决这个问题。
首先是初始项目中,我们只用了log4j的日志框架就可以满足使用了
后续中,我们要对项目进行迭代升级,需要使用logback日志框架。如果不添加桥接器依赖的话。如下如图所示
在原始代码中,会有错误提示。找不到类
这时我们就需要引入对应的桥接器依赖
此时迭代过后的项目也不会报错,且使用的日志框架为logback
注意问题
1.jcl-over-slf4j.jar和 slf4j-jcl.jar不能同时部署。前一个jar文件将导致JCL将日志系统的选择委托给SLF4J,后一个jar文件将导致SLF4J将日志系统的选择委托给JCL,从而导致无限循环。
2.log4j-over-slf4j.jar和slf4j-log4j12.jar不能同时出现
3.jul-to-slf4j.jar和slf4j-jdk14.jar不能同时出现
4.所有的桥接都只对Logger日志记录器对象有效,如果程序中调用了内部的配置类或者是Appender,Filter等对象,将无法产生效果。