logback.xml解读

1、logback.xml的根节点为configuration,有三个属性,如下:
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
2、contextListener标签带有一个class属性,配置自定义实现类,用于定义一些动态配置,比如日志路径,等级等,这些数据可以放在数据库或其他一些存储介质中,启动的时候获取配置。如:<contextListener class="com.demo.config.utils.CustomLogContextListener" />
3、property标签,用于定义参数,定义方式有多种:
3.1通过name、value方式
<property name="LOG_PATH" value="/log/path" />
3.2通过引入属性文件方式
<property file="src/main/java/test/config/demo.properties" />
<property file="/config/logback/demo.properties" />
<property resource="demo.properties" /><!-- 使用classpath的方式引入文件 -->
4、timestamp定义事件字符串,包含两个属性key、datePattern;
key:标识此<timestamp>的名字;
datePattern:设置将当前时间转换为字符串的格式,格式遵循java.txt.SimpleDateFormat。
如:<timestamp key="nowDate" datePattern="yyyy-MM-dd"/>
5、appender用于定义日志输出方式,包含两个属性,name,class
name标识appender的名字,class用于指定日志的输出方式
如:<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
6、encoder编码器负责将传入事件转换为字节数组,并将生成的字节数组写入适当的OutputStream,class属性用于指定实现编辑器的类
7、layout,该标签为encoder的子标签,用于设置日志输出格式的实现类
8、pattern,定义日志输出格式,如%d{yyyyMMdd-HH:mm:ss.SSS}|%-5level|%X{SysSeq}|%X{process}|%thread|%logger{100}.%method:%L|%msg %n
9、rollingPolicy,包含class属性,指定日志滚动方式的实现类,包含下子标签
9.1、fileNamePattern指定日志文件输出路径及文件名
9.2、maxFileSize指定日志文件大小的最大值
9.3、maxHistory指定日志文件保留天数
9.4、totalSizeCap日志文件保留总大小
9.5、cleanHistoryOnStart启动时删除过期日志
10、discriminator鉴别器,包含两个子标签key和defaultValue,根据key对应的value鉴别日志事件,然后委托给具体appender写日志
11、sift和discriminator鉴别器组合使用,sift指定具体的appender
如:
    <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
        <!--discriminator鉴别器,根据svccode这个key对应的value鉴别日志事件,然后委托给具体appender写日志-->
        <discriminator>
            <key>svccode</key>
            <defaultValue>default</defaultValue>
        </discriminator>
        <sift>
            <!--具体的写日志appender,每一个svccode创建一个文件-->
            <appender name="FILE-${svccode}" class="ch.qos.logback.core.FileAppender">
                <file>/tmp/logbacktest/${svccode}.log</file>
                <append>true</append>
                <encoder charset="UTF-8">
                    <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}]|%-5level|%logger{36}|%msg%n</pattern>
                </encoder>
            </appender>
        </sift>
    </appender>
12、discardingThreshold异步日志剩余队列深度,默认discardingThreshold = queueSize/5,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志,为0标识不丢弃,计算方式如下:
如果queueSize=100,则discardingThreshold 的取值范围: 0 <= discardingThreshold <= 100。
discardingThreshold =0时,表示剩余容量在小于0%的时候,日志级别<=INFO的内容才不会打印;但剩余容量最少也只会等于0%,不会小于0%,所以在此情况下所有日志级别都会打印。
discardingThreshold =100时,表示剩余容量在小于100%的时候,日志级别<=INFO的内容不会打印;所以此情况下只会打印WARN、ERROR级别的内容。
13、queueSize异步日志队列深度,该值会影响性能.默认值为256
14、neverBlock设置队列入队时非阻塞,当队列满时会直接丢弃日志,但是对性能提升极大,如:<neverBlock>true</neverBlock>
15、includeCallerData,提取调用者数据标志,提取调用者数据的代价是相当昂贵的。为了提升性能,默认情况下,当event被加入到queue时,event关联的调用者数据不会被提取。默认情况下,只有"cheap"的数据,如线程名。比如日志中的代码行号如果需要输出则应将该值设为true。实测includeCallerData=true会带来一定性能下降,但高并发下仍远比同步日志方式的tps要高。
16、filter过滤器,用于过滤打印的日志,支持级别、阈值、条件过滤器等
如:
<filter class="ch.qos.logback.classic.filter.LevelFilter">   
    <level>INFO</level>   <!--设置过滤级别-->
    <onMatch>ACCEPT</onMatch>   <!--用于配置符合过滤条件的操作-->
    <onMismatch>DENY</onMismatch>   <!--用于配置不符合过滤条件的操作-->
</filter>   
17、logger设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置日志打印级别,大小写无关:TRACE、DEBUG、INFO、WARN、ERROR、ALL、OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息。默认是true。
<logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。
18、root也是<logger>元素,但是它是根logger。只有一个level属性.
level:用来设置日志打印级别,大小写无关:TRACE、DEBUG、INFO、WARN、ERROR、ALL、OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。
<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值