• 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

    示例

    
    <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}}){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="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.logfile>
            <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.zipfileNamePattern>
                <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>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

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

    • 级别过滤器 ch.qos.logback.classic.filter.LevelFilter
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        
        <level>INFOlevel>
        
        <onMatch>ACCEPTonMatch>
        
        <onMismatch>DENYonMismatch>
    filter>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 阈值过滤器 ch.qos.logback.classic.filter.ThresholdFilter
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFOlevel>
    filter>
    
    • 1
    • 2
    • 3
    • 表达式过滤器 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator> 
            <expression>return message.contains("There is no session with id");expression>
        evaluator>
        <OnMatch>DENYOnMatch>
        <OnMismatch>NEUTRALOnMismatch>
    filter>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 包含标记:ch.qos.logback.classic.boolex.OnMarkerEvaluator
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
            <marker>MYBATISmarker>
        evaluator>
        <OnMismatch>NEUTRALOnMismatch>
        <OnMatch>DENYOnMatch>
    filter>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 自定义过滤器

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

  • 相关阅读:
    10分钟讲清int 和 Integer 的区别
    Dubbo中的负载均衡算法之平滑加权轮询算法源码解析
    2023亚太杯数学建模ABC题思路代码模型分析
    【第四阶段】kotlin语言的Map集合学习
    老司机带带你,教你学会Java中又骚又暴力的“反射”技术
    自动化运维:Ansible之playbook基于ROLES部署LNMP平台
    从静态链接到动态链接,彻底理解ELF
    java单例模式
    用专业团队管理软件工具轻松“拿捏”年轻运营团队
    10分钟看懂Docker和K8S,docker k8s 区别
  • 原文地址:https://blog.csdn.net/excellentchen/article/details/127811356