精华内容
下载资源
问答
  • logback.xml配置详解

    2019-07-22 18:17:35
    logback.xml配置详解 相关文章 SSM项目中应用:SSM框架搭建Web项目 log4j.xml配置详解:log4j.xml配置详解 log4j自定义输出级别和输出信息:log4j自定义输出级别和输出信息 jar包链接地址:Jar包下载点我 1.简介 ...

    相关文章链接:

    SSM框架搭建Web项目

    相关文章链接 第3节 日志配置

    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.代码样例

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 级别从高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
    <!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
    <!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志 -->
    <!-- scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
    <!-- scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
    <!-- debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
        <!-- 动态日志级别 -->
        <jmxConfigurator />
        <!-- 定义日志文件 输出位置 -->
        <property name="log_dir" value="D:/logbacks" />
        <!-- 日志最大的历史 30天 -->
        <property name="maxHistory" value="30" />
    
        <!-- ConsoleAppender 控制台输出日志 -->
        <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>
    
        <!-- ERROR级别日志 -->
        <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender -->
        <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 过滤器,只记录ERROR级别的日志 -->
            <!-- 果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 设置过滤级别 -->
                <level>ERROR</level>
                <!-- 用于配置符合过滤条件的操作 -->
                <onMatch>ACCEPT</onMatch>
                <!-- 用于配置不符合过滤条件的操作 -->
                <onMismatch>DENY</onMismatch>
            </filter>
            <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志输出位置 可相对、和绝对路径 -->
                <fileNamePattern>
                    ${log_dir}/error/%d{yyyy-MM-dd}/error-log.log
                </fileNamePattern>
                <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6, 则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除 -->
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>
                    <!-- 设置日志输出格式 -->
                    %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n
                </pattern>
            </encoder>
        </appender>
    
        <!-- WARN级别日志 appender -->
        <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 过滤器,只记录WARN级别的日志 -->
            <!-- 果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 设置过滤级别 -->
                <level>WARN</level>
                <!-- 用于配置符合过滤条件的操作 -->
                <onMatch>ACCEPT</onMatch>
                <!-- 用于配置不符合过滤条件的操作 -->
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志输出位置 可相对、和绝对路径 -->
                <fileNamePattern>${log_dir}/warn/%d{yyyy-MM-dd}/warn-log.log</fileNamePattern>
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- INFO级别日志 appender -->
        <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log_dir}/info/%d{yyyy-MM-dd}/info-log.log</fileNamePattern>
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- DEBUG级别日志 appender -->
        <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>DEBUG</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log_dir}/debug/%d{yyyy-MM-dd}/debug-log.log</fileNamePattern>
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- TRACE级别日志 appender -->
        <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log_dir}/trace/%d{yyyy-MM-dd}/trace-log.log</fileNamePattern>
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
            </encoder>
        </appender>
        
         <logger name="org.springframework">
            <level value="DEBUG" />
            <appender-ref ref="${log.appender:-DEBUG}" />
        </logger>
    
        <!-- root级别 DEBUG -->
        <root>
            <!-- 打印debug级别日志及以上级别日志 -->
            <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输出日志了。

    展开全文
  • logback.xml 配置详解

    2019-01-03 18:57:59
    Logback 如何加载配置logback 首先会查找 logback.groovy 文件 当没有找到,继续试着查找 logback-test.xml 文件 当没有找到时,继续试着查找 logback.xml 文件 如果仍然没有找到,则使用默认配置(打印到...

    Logback,Java 日志框架。

    Logback 如何加载配置的

    1. logback 首先会查找 logback.groovy 文件
    2. 当没有找到,继续试着查找 logback-test.xml 文件
    3. 当没有找到时,继续试着查找 logback.xml 文件
    4. 如果仍然没有找到,则使用默认配置(打印到控制台)

     

    configuration

    configuration 是配置文件的根节点,他包含的属性:

    • scan 
        当此属性设置为 true 时,配置文件如果发生改变,将会被重新加载,默认值为 true
    • scanPeriod 
        设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。但 scan 为 true 时,此属性生效,默认的时间间隔为 1 分钟
    • debug 
        当此属性设置为 true 时,将打印出 logback 内部日志信息,实时查看 logback 运行状态,默认值为 false。
    <configuration scan="true" scanPeriod="60 seconds" debug="false">  
    <!-- 其他配置省略-->  
    </configuration> 
    

     

    configuration 的子节点

    设置上下文名称:contextName

    每个 logger 度关联到 logger 上下文,默认上下文名称为 “default”。可以通过设置 contextName 修改上下文名称,用于区分不同应该程序的记录

    <configuration scan="true" scanPeriod="60 seconds" debug="false">  
    <contextName>myAppName</contextName>  
    <!-- 其他配置省略-->  
    </configuration>
    

     

    设置变量:property

    用于定义键值对的变量, property 有两个属性 name 和 value,name 是键,value 是值,通过 property 定义的键值对会保存到logger 上下文的 map 集合内。定义变量后,可以使用 “${}” 来使用变量

    <configuration scan="true" scanPeriod="60 seconds" debug="false">  
    <property name="APP_Name" value="myAppName" />   
    <contextName>${APP_Name}</contextName>  
    <!-- 其他配置省略-->  
    </configuration> 
    

     

    获取时间戳字符串:timestamp

    timestamp 有两个属性,key:标识此 timestamp 的名字;datePattern:时间输出格式,遵循SimpleDateFormat 的格式

    <configuration scan="true" scanPeriod="60 seconds" debug="false">  
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>   
    <contextName>${bySecond}</contextName>  
    <!-- 其他配置省略-->  
    </configuration>   
    

     

    logger

    logger 有两种级别,一种是 root,一种是普通的 logger,logger 是用来设置某一个包或者具体的某一个类的日志打印机级别,以及制定的 appender。 
    logger 有三个属性

    • name:用来指定此 logger 约束的某一个包或者具体的某一个类
    • level:用来设置打印机别,
    • addtivity:是否向上级 logger 传递打印信息。默认是 true

    每个 logger 都有对应的父级关系,它通过包名来决定父级关系,root 是最高级的父元素。 
    下面定义了四个 logger,他们的父子关系从小到大为: 
    com.lwc.qg.test.logbackDemo → com.lwc.qg.tes → com.lwc.qg → root

            <!-- 根 logger -->
    <root level="info">
    <appender-ref ref="STDOUT"/>
    </root>
    
    <!--
                普通的 logger
                name:类名或包名,标志该 logger 与哪个包或哪个类绑定
                level:该 logger 的日志级别
                additivity:是否将日志信息传递给上一级
            -->
    <logger name="com.lwc.qg.test.logbackDemo" level="debug" additivity="true">
    <appender-ref ref="STDOUT"/>
    </logger>
    
    <logger name="com.lwc.qg.test" level="info" additivity="true">
    <appender-ref ref="STDOUT"/>
    </logger>
    
    <logger name="com.lwc.qg" level="info" additivity="true">
    <appender-ref ref="STDOUT"/>
    </logger>
    

      从该种级别来看,如果此时在最低层的 logger 输出日志信息,以该配置作为基础,它将会向父级的所有 logger 依次传递,所以按理来说一个打印信息将会打印四次

    Alt text

      从控制台上看,的确每条日志信息都被打印出了四次,但是细心从配置文件上来看,root 的日志级别配置的为 info,但是却输出 debug 级别的日志信息,所以从测试结果可以看出,向上传递的日志信息的日志级别将由最底层的子元素决定(最初传递信息的 logger),因为子元素设置的日志级别为 debug,所以也输出了 debug 级别的信息。 
      因此,从理论上来说,如果子元素日志级别设置高一点,那么也将会只输出高级别的日志信息。实际上也是如此,如果我们把 com.lwc.qg.test.logbackDemo 对应的 logger 日志级别设为 warn,那么将只会输出 warn 及其以上的信息

    Alt text

     

    root

    root 也是 logger 元素,但它是根 logger。只有一个 level 属性

     

    appender

    appender 是负责写日志的组件,常用的组件有:

    • ConsoleAppender
    • FileAppender
    • RollingFileAppender

     

    ConsoleAppender

    控制台日志组件,该组件将日志信息输出到控制台,该组件有以下节点

    • encoder:对日志进行格式化
    • target:System.out 或者 System.err,默认是 System.out
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
    <encoder>  
    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>  
    </encoder> 
    <target>System.out</target> 
    </appender> 
    

     

    FileAppender

    文件日志组件,该组件将日志信息输出到日志文件中,该组件有以下节点

    • file:被写入的文件名,可以是相对路径,也可以是绝对路径。如果上级目录不存在会自动创建,没有默认值
    • append:如果是 true,日志被追加到文件结尾;如果是 false,清空现存文件,默认是 true。
    • encoder:格式化
    • prudent:如果是 true,日志会被安全的写入文件,即使其他的 FileAppender 也在向此文件做写入操作,效率低,默认是 false。
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>testFile.log</file>
    <append>true</append>
    <encoder>
    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
    <prudent>true</prudent>
    </appender>
    

     

    RollingFileAppender

    滚动记录文件日志组件,先将日志记录记录到指定文件,当符合某个条件时,将日志记录到其他文件,该组件有以下节点

    • file:文件名
    • encoder:格式化
    • rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名
    • triggeringPolicy:告知 RollingFileAppender 合适激活滚动
    • prudent:当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。

     

    rollingPolicy

    滚动策略

    1. TimeBasedRollingPolicy:最常用的滚动策略,它根据时间来制定滚动策略,即负责滚动也负责触发滚动,包含节点:

      • fileNamePattern:文件名模式
      • maxHistoury:控制文件的最大数量,超过数量则删除旧文件
    2. FixedWindowRollingPolicy:根据固定窗口算法重命名文件的滚动策略,包含节点

      • minInedx:窗口索引最小值
      • maxIndex:串口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为12
      • fileNamePattern:文件名模式,必须包含%i,命名模式为 log%i.log,会产生 log1.log,log2.log 这样的文件
    3. triggeringPolicy:根据文件大小的滚动策略,包含节点

      • maxFileSize:日志文件最大大小
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
    <maxHistory>30</maxHistory>
    </rollingPolicy>
    
    <encoder>
    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
    </appender>
    

     

    filter 过滤器

    过滤器是用于日志组件中的,每经过一个过滤器都会返回一个确切的枚举值,分别是

    • DENY:返回 DENY,日志将立即被抛弃不再经过其他过滤器
    • NEUTRAL:有序列表的下个过滤器接着处理日志
    • ACCEPT:日志会被立即处理,不再经过剩余过滤器

     

    常用过滤器

    常用的过滤器有以下:

    • LevelFilter 
      级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据 omMatch 和 omMismatch 接受或拒绝日志。他有以下节点 
        level:过滤级别 
        onMatch:配置符合过滤条件的操作 
        onMismatch:配置不符合过滤条件的操作 
      例:该组件设置一个 INFO 级别的过滤器,那么所有非 INFO 级别的日志都会被过滤掉  
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>INFO</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>  
    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>  
    </encoder> 
    <target>System.out</target> 
    </appender> 
    
    • ThresholdFilter 
      临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器会返回 NEUTRAL;当日志级别低于临界值时,日志会被拒绝 
      例:过滤掉所有低于 INFO 级别的日志
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>INFO</level> 
    </filter>
    <encoder>  
    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>  
    </encoder> 
    <target>System.out</target> 
    </appender> 
    
    • EvaluatorFilter 
      求值过滤器,评估、鉴别日志是否符合指定条件,包含节点: 
        evaluator:鉴别器,通过子标签 expression 配置求值条件 
        onMatch:配置符合过滤条件的操作 
        onMismatch:配置不符合过滤条件的操作
    展开全文
  • slf4j日志demo项目 logback.xml配置详解,slf4j日志demo项目 logback.xml配置详解,slf4j日志demo项目 logback.xml配置详解,slf4j日志demo项目 logback.xml配置详解
  • (转)Spring boot——logback.xml 配置详解(二)阅读目录1 根节点包含的属性2 根节点的子节点文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢!回到顶部1 根节点&lt;configuration&...

    (转)Spring boot——logback.xml 配置详解(二)

    文章转载自:http://aub.iteye.com/blog/1101260在此对作者的辛苦表示感谢!

    1 根节点<configuration>包含的属性

    scan:

    当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

    scanPeriod:

    设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。

    debug:

    当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

    例如:

    <configuration scan="true" scanPeriod="60 seconds" debug="false">
          <!-- 其他配置省略-->
    </configuration>

    2 根节点<configuration>的子节点

     

    2.1 设置上下文名称:<contextName>

    每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。(并没有感觉有什么作用呢)

    <configuration scan="true" scanPeriod="60 seconds" debug="false">
          <contextName>myAppName</contextName>
          <!-- 其他配置省略-->
    </configuration>

    2.2 设置变量:<property>

    用来定义变量值的标签,<property> 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

    例如使用<property>定义上下文名称,然后在<contentName>设置logger上下文时使用。

    <configuration scan="true" scanPeriod="60 seconds" debug="false">
          <property name="APP_Name" value="myAppName" /> 
          <contextName>${APP_Name}</contextName>
          <!-- 其他配置省略-->
    </configuration> 

    2.3 获取时间戳字符串:<timestamp>

    两个属性 key:标识此<timestamp> 的名字;datePattern:设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式。

            例如将解析配置文件的时间作为上下文名称:

    <configuration scan="true" scanPeriod="60 seconds" debug="false">
          <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/> 
          <contextName>${bySecond}</contextName>
          <!-- 其他配置省略-->
    </configuration>   

    2.4 设置loger节点

    <loger>

    用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。

    name:

    用来指定受此loger约束的某一个包或者具体的某一个类。

    level:

    用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。

    如果未设置此属性,那么当前loger将会继承上级的级别。

    这里自己总结下各个节点的优先级:root<append<loger。还需要在实践中不断总结,精确控制日志的输出

    addtivity:

    是否向上级loger传递打印信息。默认是true。(用的不多)

    <loger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger。

    实践总结:当<loger>中包含<appender-ref>时,如果addtivity=true,则会将打印信息传递到root;如果addtivity=false,则只会在<loger>中<appender-ref>打印信息,不会向上传递

    2.5 设置root节点

    <root>

    也是<loger>元素,但是它是根loger。只有一个level属性,应为已经被命名为"root".

    level:

    用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。

    默认是DEBUG。

    <root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger

    例如:

    LogbackDemo.java类

    复制代码
    package logback;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class LogbackDemo {
        private static Logger log = LoggerFactory.getLogger(LogbackDemo.class);
        public static void main(String[] args) {
            log.trace("======trace");
            log.debug("======debug");
            log.info("======info");
            log.warn("======warn");
            log.error("======error");
        }
    } 
    复制代码

    logback.xml配置文件

    第1种:只配置root

    复制代码
    <configuration> 
     
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
        <!-- encoder 默认配置为PatternLayoutEncoder --> 
        <encoder> 
          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
        </encoder> 
      </appender> 
     
      <root level="INFO">           
        <appender-ref ref="STDOUT" /> 
      </root>   
       
     </configuration>
    复制代码

     其中appender的配置表示打印到控制台(稍后详细讲解appender );

    <root level="INFO">将root的打印级别设置为“INFO”,指定了名字为“STDOUT”的appender。

     

    当执行logback.LogbackDemo类的main方法时,root将级别为“INFO”及大于“INFO”的日志信息交给已经配置好的名为“STDOUT”的appender处理,“STDOUT”appender将信息打印到控制台;

    打印结果如下:

    13:30:38.484 [main] INFO  logback.LogbackDemo - ======info
    13:30:38.500 [main] WARN  logback.LogbackDemo - ======warn
    13:30:38.500 [main] ERROR logback.LogbackDemo - ======error

     

      第2种:带有loger的配置,不指定级别,不指定appender,

    复制代码
    <configuration> 
     
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
        <!-- encoder 默认配置为PatternLayoutEncoder --> 
        <encoder> 
          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
        </encoder> 
      </appender> 
     
      <!-- logback为java中的包 --> 
      <logger name="logback"/> 
     
      <root level="DEBUG">           
        <appender-ref ref="STDOUT" /> 
      </root>   
       
     </configuration>
    复制代码

     

     其中appender的配置表示打印到控制台(稍后详细讲解appender );

    <logger name="logback" />将控制logback包下的所有类的日志的打印,但是并没有设置打印级别,所以继承他的上级<root>的日志级别“DEBUG”

    没有设置addtivity,默认为true,将此loger的打印信息向上级传递;

    没有设置appender,此loger本身不打印任何信息。

    <root level="DEBUG">将root的打印级别设置为“DEBUG”,指定了名字为“STDOUT”的appender。

     

    当执行logback.LogbackDemo类的main方法时,因为LogbackDemo 在包logback中,所以首先执行<logger name="logback" />,将级别为“DEBUG”及大于“DEBUG”的日志信息传递给root,本身并不打印;

    root接到下级传递的信息,交给已经配置好的名为“STDOUT”的appender处理,“STDOUT”appender将信息打印到控制台;

    打印结果如下:

    13:19:15.406 [main] DEBUG logback.LogbackDemo - ======debug
    13:19:15.406 [main] INFO  logback.LogbackDemo - ======info
    13:19:15.406 [main] WARN  logback.LogbackDemo - ======warn
    13:19:15.406 [main] ERROR logback.LogbackDemo - ======error

     第3种:带有多个loger的配置,指定级别,指定appender  

    复制代码
    <configuration> 
       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
        <!-- encoder 默认配置为PatternLayoutEncoder --> 
        <encoder> 
          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
        </encoder> 
      </appender> 
     
      <!-- logback为java中的包 --> 
      <logger name="logback"/> 
      <!--logback.LogbackDemo:类的全路径 --> 
      <logger name="logback.LogbackDemo" level="INFO" additivity="false">
          <appender-ref ref="STDOUT"/>
      </logger> 
      
      <root level="ERROR">           
        <appender-ref ref="STDOUT" /> 
      </root>   
    </configuration>
    复制代码

    其中appender的配置表示打印到控制台(稍后详细讲解appender );

     

    <logger name="logback" />将控制logback包下的所有类的日志的打印,但是并没用设置打印级别,所以继承他的上级<root>的日志级别“DEBUG”;

    没有设置addtivity,默认为true,将此loger的打印信息向上级传递;

    没有设置appender,此loger本身不打印任何信息。

     

     <logger name="logback.LogbackDemo" level="INFO" additivity="false">控制logback.LogbackDemo类的日志打印,打印级别为“INFO”;

    additivity属性为false,表示此loger的打印信息不再向上级传递,

    指定了名字为“STDOUT”的appender。

     

    <root level="ERROR">将root的打印级别设置为“ERROR”,指定了名字为“STDOUT”的appender。

     

     当执行logback.LogbackDemo类的main方法时,先执行<logger name="logback.LogbackDemo" level="INFO" additivity="false">,将级别为“INFO”及大于“INFO”的日志信息交给此loger指定的名为“STDOUT”的appender处理,在控制台中打出日志,不再向次loger的上级 <logger name="logback"/> 传递打印信息;

    <logger name="logback"/>未接到任何打印信息,当然也不会给它的上级root传递任何打印信息;

    打印结果如下:

    14:05:35.937 [main] INFO  logback.LogbackDemo - ======info
    14:05:35.937 [main] WARN  logback.LogbackDemo - ======warn
    14:05:35.937 [main] ERROR logback.LogbackDemo - ======error 

     如果将<logger name="logback.LogbackDemo" level="INFO" additivity="false">修改为 <logger name="logback.LogbackDemo" level="INFO" additivity="true">那打印结果将是什么呢?

    没错,日志打印了两次,想必大家都知道原因了,因为打印信息向上级传递,logger本身打印一次,root接到后又打印一次。

    这里要注意,<loger>中是包含<appender-ref>的,所以<loger>和<root>节点中的append-ref同时打印日志信息。但是loger的优先级高于root,所以日志信息以loger为主

    打印结果如下:  

    14:09:01.531 [main] INFO  logback.LogbackDemo - ======info
    14:09:01.531 [main] INFO  logback.LogbackDemo - ======info
    14:09:01.531 [main] WARN  logback.LogbackDemo - ======warn
    14:09:01.531 [main] WARN  logback.LogbackDemo - ======warn
    14:09:01.531 [main] ERROR logback.LogbackDemo - ======error
    14:09:01.531 [main] ERROR logback.LogbackDemo - ======error 

     带有多个loger的配置,指定级别,指定appender。情况下:
    将<logger name="logback.LogbackDemo" level="INFO" additivity="false">修改为 <logger name="logback.LogbackDemo" level="INFO" additivity="true">那打印结果将是什么呢?
    出现重复打印结果的原因是否可以理解为如下过程:

    <logger name="logback.LogbackDemo" level="INFO" additivity="true"> 这个logger向<logger name="logback"/> 进行了传递,<logger name="logback"/> 又向<root>进行了传递,最后由root 的appender 打印了。


    
        

    展开全文
  • (转)Spring boot——logback.xml 配置详解(四)&lt;filter&gt;阅读目录1 filter的使用2 常用的过滤器文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢!回到顶部1 filter的使用...

    (转)Spring boot——logback.xml 配置详解(四)<filter>

    文章转载自:http://aub.iteye.com/blog/1101260在此对作者的辛苦表示感谢!

    1 filter的使用

    <filter>:

     Logback的过滤器基于三值逻辑(ternary logic),允许把它们组装或成链,从而组成任意的复合过滤策略。过滤器很大程度上受到Linux的iptables启发。这里的所谓三值逻辑是说,过滤器的返回值只能是ACCEPT、DENY和NEUTRAL的其中一个。

    • 如果返回DENY,那么记录事件立即被抛弃,不再经过剩余过滤器;
    • 如果返回NEUTRAL,那么有序列表里的下一个过滤器会接着处理记录事件;
    • 如果返回ACCEPT,那么记录事件被立即处理,不再经过剩余过滤器。

    过滤器被添加到<Appender> 中,为<Appender> 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。<Appender> 有多个过滤器时,按照配置顺序执行。

    2 常用的过滤器

    2.1 LevelFilter

    LevelFilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:

    <level>:设置过滤级别

    <onMatch>:用于配置符合过滤条件的操作

    <onMismatch>:用于配置不符合过滤条件的操作

    例如:将过滤器的日志级别配置为INFO,所有INFO级别的日志交给appender处理,非INFO级别的日志,被过滤掉。

    复制代码
    <configuration> 
      <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
          <level>INFO</level> 
          <onMatch>ACCEPT</onMatch> 
          <onMismatch>DENY</onMismatch> 
        </filter> 
        <encoder> 
          <pattern> 
            %-4relative [%thread] %-5level %logger{30} - %msg%n 
          </pattern> 
        </encoder> 
      </appender> 
      <root level="DEBUG"> 
        <appender-ref ref="CONSOLE" /> 
      </root> 
    </configuration>
    复制代码

     

    2.2 ThresholdFilter

    ThresholdFilter: 临界值过滤器,过滤掉低于指定临界值的日志。

    当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。

    例如:过滤掉所有低于INFO级别的日志。

    复制代码
    <configuration> 
      <appender name="CONSOLE" 
        class="ch.qos.logback.core.ConsoleAppender"> 
        <!-- 过滤掉 TRACE 和 DEBUG 级别的日志--> 
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
          <level>INFO</level> 
        </filter> 
        <encoder> 
          <pattern> 
            %-4relative [%thread] %-5level %logger{30} - %msg%n 
          </pattern> 
        </encoder> 
      </appender> 
      <root level="DEBUG"> 
        <appender-ref ref="CONSOLE" /> 
      </root> 
    </configuration>  
    复制代码

    2.3 EvaluatorFilter

    (没有尝试)

    EvaluatorFilter: 求值过滤器,评估、鉴别日志是否符合指定条件。需要额外的两个JAR包,commons-compiler.jar和janino.jar有以下子节点:

    <evaluator>:

    鉴别器,常用的鉴别器是JaninoEventEvaluato,也是默认的鉴别器,它以任意的java布尔值表达式作为求值条件,求值条件在配置文件解释过成功被动态编译,布尔值表达式返回true就表示符合过滤条件。evaluator有个子标签<expression>,用于配置求值条件。

    求值表达式作用于当前日志,logback向求值表达式暴露日志的各种字段:

     Name       Type         Description

    eventLoggingEvent与记录请求相关联的原始记录事件,下面所有变量都来自event,例如,event.getMessage()返回下面"message"相同的字符串
    messageString日志的原始消息,例如,设有logger mylogger,"name"的值是"AUB",对于 mylogger.info("Hello {}",name); "Hello {}"就是原始消息。
    formatedMessageString日志被各式话的消息,例如,设有logger mylogger,"name"的值是"AUB",对于 mylogger.info("Hello {}",name); "Hello Aub"就是格式化后的消息。
    loggerStringlogger 名。
    loggerContextLoggerContextVO日志所属的logger上下文。
    levelint级别对应的整数值,所以 level > INFO 是正确的表达式。
    timeStamplong创建日志的时间戳。
    markerMarker与日志请求相关联的Marker对象,注意“Marker”有可能为null,所以你要确保它不能是null。
    mdcMap包含创建日志期间的MDC所有值得map。访问方法是:mdc.get("myKey") 。mdc.get()返回的是Object不是String,要想调用String的方法就要强转,例如,

    ((String) mdc.get("k")).contains("val") .MDC可能为null,调用时注意。

    throwablejava.lang.Throwable如果没有异常与日志关联"throwable" 变量为 null. 不幸的是, "throwable" 不能被序列化。在远程系统上永远为null,对于与位置无关的表达式请使用下面的变量throwableProxy
    throwableProxyIThrowableProxy与日志事件关联的异常代理。如果没有异常与日志事件关联,则变量"throwableProxy" 为 null. 当异常被关联到日志事件时,"throwableProxy" 在远程系统上不会为null

     

    <onMatch>:用于配置符合过滤条件的操作

    <onMismatch>:用于配置不符合过滤条件的操作

    例如:过滤掉所有日志消息中不包含“billing”字符串的日志。

    复制代码
    <configuration> 
     
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">       
          <evaluator> <!-- 默认为 ch.qos.logback.classic.boolex.JaninoEventEvaluator --> 
            <expression>return message.contains("billing");</expression> 
          </evaluator> 
          <OnMatch>ACCEPT </OnMatch>
          <OnMismatch>DENY</OnMismatch>
        </filter> 
        <encoder> 
          <pattern> 
            %-4relative [%thread] %-5level %logger - %msg%n 
          </pattern> 
        </encoder> 
      </appender> 
     
      <root level="INFO"> 
        <appender-ref ref="STDOUT" /> 
      </root> 
    </configuration>
    复制代码

     

    <matcher> :

    匹配器,尽管可以使用String类的matches()方法进行模式匹配,但会导致每次调用过滤器时都会创建一个新的Pattern对象,为了消除这种开销,可以预定义一个或多个matcher对象,定以后就可以在求值表达式中重复引用。<matcher>是<evaluator>的子标签。

    <matcher>中包含两个子标签,一个是<name>,用于定义matcher的名字,求值表达式中使用这个名字来引用matcher;另一个是<regex>,用于配置匹配条件。

    例如:

    复制代码
    <configuration debug="true"> 
     
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> 
          <evaluator>         
            <matcher> 
              <Name>odd</Name> 
              <!-- filter out odd numbered statements --> 
              <regex>statement [13579]</regex> 
            </matcher> 
             
            <expression>odd.matches(formattedMessage)</expression> 
          </evaluator> 
          <OnMismatch>NEUTRAL</OnMismatch> 
          <OnMatch>DENY</OnMatch> 
        </filter> 
        <encoder> 
          <pattern>%-4relative [%thread] %-5level %logger - %msg%n</pattern> 
        </encoder> 
      </appender> 
     
      <root level="DEBUG"> 
        <appender-ref ref="STDOUT" /> 
      </root> 
    </configuration>
    复制代码

    其他Filter不太常用我这里就不讲了,大家可以参见官网。

    中文手册下载:


    
        

    展开全文
  • (转)Spring boot——logback.xml 配置详解(三)&lt;appender&gt;阅读目录1 appender2 encoder文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 回到顶部1 appender&lt;...
  • 选择logback的理由 ==logback==与==log4j==的简单对比一下: ...3.有更丰富的文档,支持xml的和group的配置。 4.对配置文件的在项目启动中,可以热加载。 5.可以自动对日志进行归档,可以对日志进行归档...
  • logback.xml配置文件 第1种:只配置root <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoder 默认配置为PatternLayoutEncoder --> <encoder> ...
  • --Appendar详解: http://logback.qos.ch/manual/appenders.html#RollingFileAppender --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 当前Log文件名 --> <file>test....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,761
精华内容 1,504
关键字:

logback.xml配置详解