Logback.xml配置笔记

简述

logback是java的日志开源组件,也是log4j创始人写的,属于改良版本,据说性能比log4j要好10倍;
同时,logback遵循SLF4J接口规范,由logback改为其他日志组件,比如log4j或者其他只要遵守SLF4J接口规范的,都只需要更换jar包,不需要修改业务代码。
总之,目前普遍推荐使用logback日志组件,下面记录一下它的配置文件中的各项配置含义。

logback.xml文件详解

直接上配置文件,结合配置文件介绍:

<?xml version="1.0" encoding="UTF-8"?>

<!--debug:默认false,要不要打印 logback内部日志信息,建议关闭;
    scan:默认true,配置发送改变时,要不要重新加载;
    scanPeriod:检测配置发生变化的时间间隔,默认1分钟,如果没给出时间单位,默认时间单位是毫秒;
-->
<configuration debug="false" scan="true" scanPeriod="50 seconds">

	<!--定义常量开始---------------->
    <!--日志上下文名称,后面输出格式中可以通过定义 %contextName 来打印日志上下文名称-->
    <contextName>logback</contextName>
    
    <!--定义参数,后面可以通过${app.name}使用-->
    <property name="app.name" value="logback_test"/>
    <!--trace<debug<info<warn<error-->
    <property name="log.level" value="info"/>
    <!--日志文件保留时间,30天-->
    <property name="log.maxHistory" value="30"/>
    <!-- 定义日志的根目录 -->
    <property name="log.filePath" value="logs/webapps"/>
    <!--
    %d :日期格式;
    %-5level :显示日志级别,-5表示占用5个字符;
    [%thread] :线程名称,名字用中括号扩起来,方便识别;
    %c :输出所属的类目,通常就是所在类的全名;
    %L :显示所在类中的行数;
    %msg :具体的日志信息;
    %n: 换行符;
    -->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}  %-5level [%thread] %c [%L] %msg%n"/>
    <!--定义常量结束---------------->

	<!--下面定义appender,不同的appender用于将日志输出到不同的地方,比如控制台和日志文件中-->
    <!--控制台日志,ConsoleAppender 用于在屏幕控制台上输出日志-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--filter表示一个过滤器,用于设置日志级别,在此LEVEL之下的日志输出不会被打印出来;-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        	<!--这里定义了DEBUG,也就是控制台不会输出比DEBUG级别小的日志,比如trace级别;
        	如果不写,默认INFO级别-->
            <level>DEBUG</level>
            <!--符合DEBUG级别的接受-->
            <onMatch>ACCEPT</onMatch>
            <!--不符合DEBUG级别的拒绝-->
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- encoder 默认配置为PatternLayoutEncoder,用于讲日志转化为字符串并输出到文件中 -->
        <encoder>
        	<!--定义控制台输出格式,值就是上面定义的常量-->
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

	<!--输出日志文件,RollingFileAppender表示滚动文件,支持每隔一段时间输出一个文件,比如每天-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--定义日志输出的路径,因为此appender默认是info级别,所以取名info.log-->
        <file>${log.filePath}/info.log</file>
        <!--定义日志滚动的策略,基于时间滚动-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--定义文件滚动时的文件名的格式;这里格式为.log,还可以设置为.log.gz,表示自动压缩-->
            <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--日志文件最大保存时长,-->
            <maxHistory>${log.maxHistory}</maxHistory>
            <!-- 日志量最大20GB,该属性在 1.1.6版本后 才开始支持-->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <!--每个日志文件最大100MB-->
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>
        
        <!--定义输出格式-->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--root是默认的logger 这里设定输出级别是debug-->
    <root level="debug">
        <!--定义了两个appender,日志会通过往这两个appender里面写,ref的参数"stdout"和"file"就是上面appender标签的name参数值-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </root>

    <!--
    logger用于告知logback应该关注哪个包下面的日志,
    对于类路径以 com.example.logback 开头的Logger,输出级别设置为info;
    这个logger没有指定appender,它会继承root节点中定义的那些appender
    -->
    <logger name="com.example.logback" level="${log.level}"/>

    <!--通过 LoggerFactory.getLogger("mytest") 可以获取到这个logger-->
    <!--由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender-->
    <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
    <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
    <logger name="mytest" level="info" additivity="false">
        <appender-ref ref="stdout"/>
    </logger>
    
    <!--由于设置了 additivity="false" ,所以输出时不会使用rootLogger的appender-->
    <!--但是这个logger本身又没有配置appender,所以使用这个logger输出日志的话就不会输出到任何地方-->
    <logger name="mytest2" level="info" additivity="false"/>
</configuration>

使用

引入maven依赖:

<dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
</dependency>

如果使用了springboot的web,默认回包含此依赖,无需额外添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值