springboot logback配置文件详解

  1. 根节点configuration
    包含三个属性:
    scan:设置为true时,如果配置文件发生改变,将会被重新加载,默认为true
    scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟
    debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false

  2. 子节点contextName
    用户区分不同应用程序,每个logger都关联,默认default,不常用

  3. 子节点property
    用来定义变量值,有name和value两个属性值。可以使用 ${} 来使用变量。

  4. 子节点timestamp
    获取时间戳字符串,有key和datePattern两个属性,datePattern设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式

  5. 子节点appender
    负责写日志的组件:name:appender名称;class:appender的全限定名
    consoleAppender:
    encoder:编码
    pattern:日志输出格式
    target:System.out(默认)和System.err
    FileAppender:
    file:文件名,可以是相对和绝对地址,不存在时自动创建
    append:true追加写入,false覆盖写入,默认true
    encoder:编码
    pattern:日志输出格式
    prudent:true安全但写入效率低,默认false
    RollingFIleAppender:
    file:文件名
    append:true追加写入,false覆盖写入,默认true
    rollingPolicy:发生滚动时,决定滚动的策略
    class:ch.qos.logback.core.rolling.TimeBasedRollingPolicy 按时间切割日志文件
    ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy 按文件大小切割日志文件
    ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy 按时间和大小切割日志文件,注意中添加%i

  6. 子节点logger
    name:指定约束的某一个包或具体类
    level:打印级别,默认集成root
    additivity:是否向上级传递,默认true

  7. 子节点root
    也是一个logger元素,但是name确定,无additivity属性
    level:打印级别,默认debug

示例

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

    <springProperty scope="context" name="CONSOLE_FILTER_LEVEL" source="logging.filter.console.level" defaultValue="TRACE"/>

<!--    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(-&#45;&#45;){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>-->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${CONSOLE_FILTER_LEVEL}</level>
        </filter>
    </appender>

    <springProperty scope="context" name="APP_HOME" source="paas.app.home"/>
    <springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="paas-module-example"/>
    <springProperty scope="context" name="FILE_FILTER_LEVEL" source="logging.filter.file.level" defaultValue="TRACE"/>
    <springProperty scope="context" name="LOG_TEMP" source="java.io.tmpdir" />
    <springProperty scope="context" name="LOG_FILE_PREFIX" source="logging.file.prefix" defaultValue="paas."/>
    <springProperty scope="context" name="LOG_FILE_SUFFIX" source="logging.file.suffix" defaultValue="log"/>

<!--    <property name="LOG_FILE_PATH" value="${LOG_PATH:-${APP_HOME:-${LOG_TEMP}/${APP_NAME}}/logs}"/>-->
    <property name="LOG_FILE_PATH" value="d:/module-connect-tool/log"/>
    <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %logger : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE_PATH}/run.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${FILE_FILTER_LEVEL}</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <cleanHistoryOnStart>${LOG_FILE_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
            <fileNamePattern>${LOG_FILE_PATH}/run-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxFileSize>${LOG_FILE_MAX_SIZE:-100MB}</maxFileSize>
            <maxHistory>${LOG_FILE_MAX_HISTORY:-30}</maxHistory>
            <totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-1GB}</totalSizeCap>
        </rollingPolicy>
    </appender>

    <logger name="FILE" level="INFO" additivity="false">
        <appender-ref ref="FILE" />
    </logger>
    <logger name="CONSOLE" level="INFO" additivity="false">
        <appender-ref ref="CONSOLE" />
    </logger>

    <root level="ERROR">
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

logback的filter详解:
filter是可以串联的

  • 级别过滤器 ch.qos.logback.classic.filter.LevelFilter
<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <!-- 过滤的级别 -->
    <level>INFO</level>
    <!-- 匹配时的操作:接收(记录) -->
    <onMatch>ACCEPT</onMatch>
    <!-- 不匹配时的操作:拒绝(不记录) -->
    <onMismatch>DENY</onMismatch>
</filter>
  • 阈值过滤器 ch.qos.logback.classic.filter.ThresholdFilter
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>INFO</level>
</filter>
  • 表达式过滤器 ch.qos.logback.core.filter.EvaluatorFilter
  1. groovy表达式:ch.qos.logback.classic.boolex.GEventEvaluator
  2. Java表达式:ch.qos.logback.classic.boolex.JaninoEventEvaluator
    需要额外的两个JAR包,commons-compiler.jar和janino.jar
<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>commons-compiler</artifactId>
    <version>3.0.12</version>
</dependency>
<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>3.0.12</version>
</dependency>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
    <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
        <expression>return message.contains("There is no session with id");</expression>
    </evaluator>
    <OnMatch>DENY</OnMatch>
    <OnMismatch>NEUTRAL</OnMismatch>
</filter>
  1. 包含标记:ch.qos.logback.classic.boolex.OnMarkerEvaluator
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
    <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
        <marker>MYBATIS</marker>
    </evaluator>
    <OnMismatch>NEUTRAL</OnMismatch>
    <OnMatch>DENY</OnMatch>
</filter>
  • 自定义过滤器

名词解释:
deny:日志将立即被抛弃不在经过其他过滤器
meutral:有序列表里的下个过滤器接着处理日志;(该级别既不处理,也不抛弃,相当于没有任何处理,日志会被保存下来并在本appender被执行)
accept:日志会被立即处理,不再经过剩余过滤器

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

excellentchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值