slf4j + logback 集成

概述

日志在系统中的重要作用是毋庸置疑的,而 slf4j 和 logback 都是属于 QOS.ch 的非常优秀的日志系统,需要了解和学习的可以访问: slf4j官网 ,logback官网 ;源代码也放在Github上,需要的可以跳转:slf4j , logback 。

集成

pom.xml

在 pom.xml 中添加:


  ch.qos.logback
  logback-classic
  1.2.3

会有三个 jar 包,分别是 logback-classic-1.2.3.jar ,logback-core-1.2.3.jar ,和 slf4j-api-1.7.25.jar ,官方的说明是:

Note that in addition to logback-classic.jar, the above declaration will automatically pull-in slf4j-api.jar and logback-core.jar into your project by virtue of Maven's transitivity rules.

这个时候已经可以使用 slf4j 的日志功能了,再对 logback 相关的进行配置。

配置

关于配置的问题,还是需要去看官网看,15个章节(目录在右侧):Introduction 。

初始化过程

在第三章节中,有关于 logback 的初始化过程的表述:

Let us begin by discussing the initialization steps that logback follows to try to configure itself:

    1.Logback tries to find a file called logback-test.xml in the classpath.

    2.If no such file is found, logback tries to find a file called logback.groovy in the classpath.

    3.If no such file is found, it checks for the file logback.xml in the classpath..

    4.If no such file is found, service-provider loading facility (introduced in JDK 1.6) is used to resolve the implementation of com.qos.logback.classic.spi.Configurator interface by looking up the file META-INF\services\ch.qos.logback.classic.spi.Configurator in the class path. Its contents should specify the fully qualified class name of the desired Configurator implementation.

    5.If none of the above succeeds, logback configures itself automatically using the BasicConfigurator which will cause logging output to be directed to the console.

The last step is meant as last-ditch effort to provide a default (but very basic) logging functionality in the absence of a configuration file. 

先查找配置文件,依次查找 logback-test.xml 、logback.groovy 和 logback.xml;如果都没有,则查找是否有实现特定配置接口的类;还没有,则使用默认的日志功能。

基本配置

在 src\main\resources 目录下添加文件logback.xml :




    
    
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            
        
    

    
    
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            
        
    
    
    
    
        
    
 
    
    

可以有 三个元素,其中 是必须要有至少一个,而另外两个可以没有,也可以多个。

要有 name 和 class 两个属性,可以有 三个元素。class 属性可以用来定义控制台打印或者文件输出。

可以对某个包进行特定的日志记录,可以控制级别的 level 和关联的 appender-ref 。

是必须要有的配置,控制日志级别,关联 控制日志输出。

更详细的内容请参考官网或源代码。

其中, 标签中定义日志的级别,可以是 ALL/TRACE/DEBUG/INFO/WARN/ERROR/OFF ,级别高于标签内限定级别的日志都会打印,OFF > ERROR > WARN > INFO > DEBUG > TRACE > ALL。

logback 中对级别的定义和 slf4j 有不同之处,slf4j 没有 OFF 和 ALL 两个,OFF 表示所有日志都不记录,而 ALL 表示全部日志都记录。可以查看源代码中关于这方面的详细情况,贴出几段代码:

public static final int OFF_INT = Integer.MAX_VALUE;
public static final int ERROR_INT = 40000;
public static final int WARN_INT = 30000;
public static final int INFO_INT = 20000;
public static final int DEBUG_INT = 10000;
public static final int TRACE_INT = 5000;
public static final int ALL_INT = Integer.MIN_VALUE;

public static final Integer OFF_INTEGER = OFF_INT;
public static final Integer ERROR_INTEGER = ERROR_INT;
public static final Integer WARN_INTEGER = WARN_INT;
public static final Integer INFO_INTEGER = INFO_INT;
public static final Integer DEBUG_INTEGER = DEBUG_INT;
public static final Integer TRACE_INTEGER = TRACE_INT;
public static final Integer ALL_INTEGER = ALL_INT;

测试

日志记录

为方便测试,添加了测试的配置 src/test/resources/logback-test.xml ,详细如下:




    
    
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            
        
    

    
    
        
        
    
   
 

其中日志级别是 TRACE 。

测试代码:

public class LogTest {

    protected Logger logger = LoggerFactory.getLogger(this.getClass());
    
    @Test
    public void logTest(){
        logger.trace("-----trace-----");
        logger.debug("-----debug-----");
        logger.info("-----info-----");
        logger.warn("-----warn-----");
        logger.error("-----error-----");
        
    }
}

运行结果:

14:40:19.069 [main] TRACE web.com.test.LogTest - -----trace-----
14:40:19.073 [main] DEBUG web.com.test.LogTest - -----debug-----
14:40:19.073 [main] INFO  web.com.test.LogTest - -----info-----
14:40:19.074 [main] WARN  web.com.test.LogTest - -----warn-----
14:40:19.074 [main] ERROR web.com.test.LogTest - -----error-----

日志级别

将 TRACE 级别改成 INFO ,测试结果:

14:40:36.416 [main] INFO  web.com.test.LogTest - -----info-----
14:40:36.421 [main] WARN  web.com.test.LogTest - -----warn-----
14:40:36.421 [main] ERROR web.com.test.LogTest - -----error-----

再将 INFO 改成 ERROR ,测试结果:

14:41:32.404 [main] ERROR web.com.test.LogTest - -----error-----

从测试结果看, 标签中的级别是最低记录级别,凡是高于或等于这个级别的日志,都会被记录下来。同样的,可以测试 ALL 和 OFF 两个级别时的结果。

可以利用 来针对某些包做特定的控制。

文件记录

将日志记录在文件中,也方便做日志保存。配置如下:



    debug.log
    
        %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n
        
    




    

在项目根目录下会有 debug.log 文件,日志会在该文件中保存。

总结

利用 logback 可以对日志做更多的控制,包括日志级别、格式等等,甚至是具体到包的日志控制,对系统日常的活动有很大的帮助。logback 还有很多作用,通过官网和源代码继续学习。

关键点:

  1. 利用 maven 集成,pom.xml内容添加;

三个 jar 包,分别是 logback-classic-1.2.3.jar ,logback-core-1.2.3.jar ,和 slf4j-api-1.7.25.jar

  1. logback.xml 的配置。

主要是 的配置

你可能感兴趣的:(slf4j + logback 集成)