美文网首页
logback配置文件的结构与解析

logback配置文件的结构与解析

作者: 早点起床晒太阳 | 来源:发表于2020-05-26 12:39 被阅读0次

    1、logback整体的日志结构

    包含1个<configuration>元素,包含零个或多个<appender>元素,然后是零个或多个<logger>元素,然后是最多一个<root>元素,如以下示例

    <configuration scan="true" scanPeriod="60 seconds" debug="false">  
        <appender>
            //xxxx
        </appender>   
        
        <logger>
            //xxxx
        </logger>
        
        <root>             
           //xxxx
        </root>  
    </configuration>  
    

    2、<logger>的用法

    1、级别继承

    这里先讲下级别继承, 参考资料:http://logback.qos.ch/manual/architecture.html#effectiveLevel
    我这里直接举例子 我发现用语言说有些难,这个是官网回答

    the logger named "com.foo" is a parent of the logger named "com.foo.Bar". Similarly, "java" is a parent of "java.util" and an ancestor of "java.util.Vector".

    意思为name值为com.foo的logger 是name值为com.foo.Bar的logger的父级。以此类推。如果logger与子logger之间没有祖先,则称该logger为子logger的父级。
    如果没有为给定的logger分配一个level,那么它将从其最接近的祖先那里继承一个已分配的级别。
    根logger即root位于记录器层次结构的顶部。默认的level是DEBUG

    2、基本选择规则

    参考资料:http://logback.qos.ch/manual/architecture.html#basic_selection

    如果一个log的级别等于或者高于logger中配置的级别,那么该logger就已被启用。
    官方说法:如果p> = q,则 向具有有效级别q的logger发出级别p的日志请求。 级别排行为 TRACE < DEBUG < INFO < WARN < ERROR.

    3、logger的具体用法

    <logger> 标签的作用是 ---用来设置某一个包或者具体的某一个类的日志打印级别以及指定appender。
    <logger> 仅有一个name属性,一个可选的level和一个可选的addtivity属性。
    name:用来指定受此logger约束的某一个包或者具体的某一个类。
    level:用来设置打印级别(日志级别),大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
    addtivity:是否向上级logger传递打印信息。默认是true。
    <logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。

    示例

    具体用法 我是用具体例子讲解logback.xml中的配置如下

    <logger name="com.example.ceshi.test.Test4" />
    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
    

    具体解析如下:
    name值为com.example.ceshi.test.Test4的logger,没有指定logger的level,默认继承它的父级即root的级别INFO,没有设置addtivity,默认为true,将此loger的打印信息向上级传递,没有设置appender,此loger本身不打印任何信息。当执行 com.example.ceshi.test.Test4中的方法是,里面的日志会首先执行<logger name="com.example.ceshi.test.Test4" />这个logger,然后将级别为INFO及大于INFO的日志信息传递给root,本身并不打印(因为没有appender);
    root接到下级传递的信息,交给已经配置好的名为STDOUT的appender处理

    还有一个重要的点 参考资料:http://logback.qos.ch/manual/configuration.html,比如还是上面那个配置,我稍微修改如下

    <logger name="com.example.ceshi.test.Test4" level="INFO" />
    <!-- 日志输出级别 -->
    <root level="ERROR">
        <appender-ref ref="STDOUT"/>
    </root>
    

    上面的解析大差不差,核心的一个疑问就是 INFO的日志在logger 中传到root中,但是root的level是ERROR,这样日志可以打印到控制台么?
    测试完成是可以将INFO的信息打印出来的。官网说明如下

    Let us note that the basic-selection rule depends on the effective level of the logger being invoked, not the level of the logger where appenders are attached. Logback will first determine whether a logging statement is enabled or not, and if enabled, it will invoke the appenders found in the logger hierarchy, regardless of their level.

    大致意思是基本选择的规则只取决于所调用的logger,而不是appender被调用的所在的logger的日志记录的级别。logback 会首先确认是否开启了日志声明,然后会在logger的层次记录中找到附加的logger,而不管它的级别

    3、<root>的用法

    参考资料:http://logback.qos.ch/manual/configuration.html#rootElement

    <root>元素配置根logger 即root logger. 它支持单个属性,即level属性。它不允许任何其他属性包括additivity 和name。与<logger>元素类似, <root>元素可以包含零个或多个 <appender-ref>元素。

    相关文章

      网友评论

          本文标题:logback配置文件的结构与解析

          本文链接:https://www.haomeiwen.com/subject/mwpmahtx.html