Logback配置详解

简介:

logback是java的日志开源组件,是log4j创始人写的,性能比log4j要好,目前主要分为3个模块:

  • logback-core:核心代码模块
  • logback-classic:log4j的一个改良版本,同时实现了slf4j的接口,这样你如果之后要切换其他日志组件也是一件很容易的事
  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

使用:

引入maven依赖


<dependency>
     <groupId>ch.qos.logbackgroupId>
     <artifactId>logback-classicartifactId>
     <version>1.2.3version>
dependency>

输出日志

//这是slf4j的接口,由于我们引入了logback-classic依赖,所以底层实现是logback
private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) throws InterruptedException {
    LOGGER.info("hello world");
}

配置

配置获取顺序

logback在启动的时候,会按照下面的顺序加载配置文件:
1、如果java程序启动时指定了logback.configurationFile属性,就用该属性指定的配置文件。如java -Dlogback.configurationFile=/path/to/mylogback.xml Test ,这样执行Test类的时候就会加载/path/to/mylogback.xml配置
2、在classpath中查找 logback.groovy 文件
3、在classpath中查找 logback-test.xml 文件
4、在classpath中查找 logback.xml 文件
5、如果是 jdk6+,那么会调用ServiceLoader 查找 com.qos.logback.classic.spi.Configurator接口的第一个实现类
6、自动使用ch.qos.logback.classic.BasicConfigurator,在控制台输出日志
上面的顺序表示优先级,使用java -D配置的优先级最高,只要获取到配置后就不会再执行下面的流程。相关代码可以看ContextInitializer#autoConfig()方法。

SLF4j的日志输出级别

在slf4j中,从小到大的日志级别依旧是trace、debug、info、warn、error。
1、TRACE:很低的日志级别,一般不会使用
2、DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
3、INFO:消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
4、WARN:表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示
5、ERROR:指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别

logback.xml 配置样例

在项目 资源文件夹 resources 下 创建 logback-spring.xml 文件。logback 将会自动读取该配置文件文件


<configuration debug="true" scan="true" scanPeriod="1 seconds">

    <contextName>logbackcontextName>
    
    <property name="app.name" value="logback_test"/>
    
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        
        
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUGlevel>
        filter>
        
        
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%npattern>
        encoder>
    appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        
        
        <file>${scheduler.manager.server.home}/logs/${app.name}.logfile>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${scheduler.manager.server.home}/logs/${app.name}.%d{yyyy-MM-dd.HH}.log.gz
            fileNamePattern>
            
            <maxHistory>60maxHistory>
            
            <totalSizeCap>20GBtotalSizeCap>
        rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            
            <maxFileSize>100MBmaxFileSize>
        triggeringPolicy>
        
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%npattern>
        encoder>
    appender>

    
    <root level="trace">
        
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    root>

    
    
    <logger name="com.example.logback" level="warn"/>

    
    
    
    
    <logger name="mytest" level="info" additivity="false">
        <appender-ref ref="stdout"/>
    logger>

    
    
    <logger name="mytest2" level="info" additivity="false"/>
configuration>

配置详解

configuration节点的属性:

1、sacn
当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
2、scanPeriod
设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟
3、debug
当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false

contextName节点

设置日志上下文名称,后面输出格式中可以通过定义 %contextName 来打印日志上下文名称

property节点

用来设置相关变量,通过key-value的方式配置,然后在后面的配置文件中通过 ${key}来访问

appender 节点

日志输出组件,主要负责日志的输出以及格式化日志。常用的属性有name和class
Logback配置详解_第1张图片

class:
1、ConsoleAppender:向控制台输出日志内容的组件,只要定义好encoder节点就可以使用。
2、FileAppender:向文件输出日志内容的组件,用法也很简单,不过由于没有日志滚动策略,一般很少使用
3、RollingFileAppender:向文件输出日志内容的组件,同时可以配置日志文件滚动策略,在日志达到一定条件后生成一个新的日志文件。
appender节点中有一个子节点filter,配置具体的过滤器,比如上面的例子配置了一个内置的过滤器ThresholdFilter,然后设置了level的值为DEBUG。这样用这个appender输出日志的时候都会经过这个过滤器,日志级别低于DEBUG的都不会输出来。
在RollingFileAppender中,可以配置相关的滚动策略,具体可以看配置样例的注释。

springboot如何整合logback

springBoot已经帮我们引入了,使用logback的相关 jar 包,所以我们不需要 再去引用
1、springboot的pom文件都会引一个parent

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.0.0.RELEASEversion>
parent>

2、点进去这个parent,会有一个这个dependency

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-dependenciesartifactId>
    <version>2.0.0.RELEASEversion>
    <relativePath>../../spring-boot-dependenciesrelativePath>
parent>

3、再点进去就是2.0版本,所谓的它给你集成的各种包依赖,而且规定了版本号,其中有一个包如下

 <dependency>
     <groupId>org.springframework.bootgroupId>
     <artifactId>spring-boot-starterartifactId>
     <version>2.0.0.RELEASEversion>
dependency>

4、再点进去

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-loggingartifactId>
    <version>2.0.0.RELEASEversion>
    <scope>compilescope>
dependency>

5、再点,这些都是原有的日志包,所以,不必再引依赖了,直接用就ok了,用法如下:

<dependencies>
    <dependency>
        <groupId>ch.qos.logbackgroupId>
        <artifactId>logback-classicartifactId>
        <version>1.2.3version>
        <scope>compilescope>
    dependency>
    <dependency>
        <groupId>org.apache.logging.log4jgroupId>
        <artifactId>log4j-to-slf4jartifactId>
        <version>2.11.1version>
        <scope>compilescope>
    dependency>
    <dependency>
        <groupId>org.slf4jgroupId>
        <artifactId>jul-to-slf4jartifactId>
        <version>1.7.25version>
        <scope>compilescope>
    dependency>
dependencies>

你可能感兴趣的:(Java,logback,log4j,java)