logback.xml配置详解

logback.xml配置详解

  • 1.简介
  • 2.配置文件默认加载位置
  • 3.代码样例
  • 4.配置文件节点详解
    • 4.1 configuration节点相关属性
    • 4.2 configuration子节点介绍
      • 4.2.1. contextName节点
      • 4.2.2. property节点
      • 4.2.3.appender 节点
      • 4.2.4.logger以及root节点

相关文章链接:

SSM框架搭建Web项目

log4j.xml配置详解

log4j自定义输出级别和输出信息

Jar包下载链接

1.简介

Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。

  1. logback-core是其它两个模块的基础模块。

  2. logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。

  3. logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

2.配置文件默认加载位置

  1. classpath下的logback.groovy

  2. classpath下的logback-test.xml

  3. classpath下的logback.xml

  4. 如果是 jdk6+,那么会调用ServiceLoader 查找 META-INF/services/ch.qos.logback.classic.spi.Configurator中的 logback 配置实现类

  5. 使用ch.qos.logback.classic.BasicConfigurator,在控制台输出日志。

3.代码样例








<configuration scan="true" scanPeriod="60 seconds" debug="false">
    
    <jmxConfigurator />
    
    <property name="log_dir" value="D:/logbacks" />
    
    <property name="maxHistory" value="30" />

    
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                
                %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n
            pattern>
        encoder>
    appender>

    
    
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            
            <level>ERRORlevel>
            
            <onMatch>ACCEPTonMatch>
            
            <onMismatch>DENYonMismatch>
        filter>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>
                ${log_dir}/error/%d{yyyy-MM-dd}/error-log.log
            fileNamePattern>
            
            <maxHistory>${maxHistory}maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>
                
                %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n
            pattern>
        encoder>
    appender>

    
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            
            <level>WARNlevel>
            
            <onMatch>ACCEPTonMatch>
            
            <onMismatch>DENYonMismatch>
        filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${log_dir}/warn/%d{yyyy-MM-dd}/warn-log.logfileNamePattern>
            <maxHistory>${maxHistory}maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%npattern>
        encoder>
    appender>

    
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFOlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir}/info/%d{yyyy-MM-dd}/info-log.logfileNamePattern>
            <maxHistory>${maxHistory}maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%npattern>
        encoder>
    appender>

    
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUGlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir}/debug/%d{yyyy-MM-dd}/debug-log.logfileNamePattern>
            <maxHistory>${maxHistory}maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%npattern>
        encoder>
    appender>

    
    <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>TRACElevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir}/trace/%d{yyyy-MM-dd}/trace-log.logfileNamePattern>
            <maxHistory>${maxHistory}maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%npattern>
        encoder>
    appender>
    
     <logger name="org.springframework">
        <level value="DEBUG" />
        <appender-ref ref="${log.appender:-DEBUG}" />
    logger>

    
    <root>
        
        <level value="debug" />
        
        <appender-ref ref="console" />
        
        <appender-ref ref="ERROR" />
        <appender-ref ref="INFO" />
        <appender-ref ref="WARN" />
        <appender-ref ref="DEBUG" />
        <appender-ref ref="TRACE" />
    root>
configuration>

4.配置文件节点详解

4.1 configuration节点相关属性

  1. debug:默认为false,要不要打印 logback内部日志信息,true则表示要打印。建议开启。
  2. scan:默认为true,配置发送改变时,要不要重新加载。
  3. scanPeriod:默认为 60 seconds,检测配置发生变化的时间间隔。如果没给出时间单位,默认时间单位是毫秒。

4.2 configuration子节点介绍

4.2.1. contextName节点

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

4.2.2. property节点

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

4.2.3.appender 节点

日志输出组件,主要负责日志的输出以及格式化日志。常用的属性有name和class。

  1. name:无默认值,appender组件的名称,后面给logger指定appender使用

  2. class:无默认值,appender的具体实现类。常用的有 ConsoleAppender、FileAppender、RollingFileAppender。

ConsoleAppender:向控制台输出日志内容的组件,只要定义好encoder节点就可以使用。

FileAppender:向文件输出日志内容的组件,用法也很简单,不过由于没有日志滚动策略,一般很少使用。

RollingFileAppender:向文件输出日志内容的组件,同时可以配置日志文件滚动策略,在日志达到一定条件后生成一个新的日志文件。

appender节点中有一个子节点filter,配置具体的过滤器,比如上面的例子配置了一个内置的过滤器ThresholdFilter,然后设置了level的值为DEBUG。这样用这个appender输出日志的时候都会经过这个过滤器,日志级别低于DEBUG的都不会输出来。

在RollingFileAppender中,可以配置相关的滚动策略,具体可以看配置样例的注释。

4.2.4.logger以及root节点

root节点和logger节点其实都是表示Logger组件。root是最顶层的logger,正常情况getLogger(“name.class”)没有找到对应logger的情况下,都是使用root节点配置的logger。

如果配置了logger,并且通过getLogger(“name.class”)获取到这个logger,输出日志的时候,就会使用这个logger配置的appender输出,同时还会使用rootLogger配置的appender。我们可以使用logger节点的additivity="false"属性来屏蔽rootLogger的appender。这样就可以不使用rootLogger的appender输出日志了。

你可能感兴趣的:(Java,Web)