• 【springboot日志】logback.xml常用配置详解


    Logback最常用就是在/src/main/resource/文件夹下的logback.xml文件中。,从而对日志进行配置输出。
    logback主要包含三个组成部分:Loggers(日志记录器)、Appenders(输出目的在)、Layouts(日志输出格式)

    下面就是一个常用的日志配置模版,下面就从跟节点来解析每个节点



     
        logback
     
       
     
       
           
           
                  ERROR
           

           
                %d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
               

           

       

     
                class="ch.qos.logback.core.rolling.RollingFileAppender">
            ${log.path}
           
                ${log.path}.%d{yyyy-MM-dd}.zip
           

     
           
                %date %level [%thread] %logger{36} [%file : %line] %msg%n
               

           

       

     
       
           
           
       

     
       
     

    1、根节点configuration,有以下属性

    scan,当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

    scanPeriod,设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。

    debug,当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

    2、contextName ,设置日志上下文名称,可以通过%contextName来打印日志上下文名称

    3、property可以用来设置变量,可以通过${name}来访问,有以下的属性

    name,用于${name}访问的key

    value,用于${name}访问的value

    file ,用于指定配置文件的路径,他的作用在于,如果你有多个配置信息的话,可以直接写在配置文件中,然后通过file引入


     
    variables.properties如下

    log.path=F:\\demo
    log.name=mylog.log
    然后就直接通过${log.path}就可以访问其值

    resource作用和file一样,但是,它是可以直接从classpath路径下引入配置文件

     
    4、appender格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。appender有以下子节点:

    filter,日志输出拦截器,可以自定义拦截器也可以用系统一些定义好的拦截器
    /**
    * 日志输出拦截器
    * @author liuxg
    * @date 2016年4月28日 下午3:36:23
    */
    public class MyFilter extends Filter {
     
    @Override
    public FilterReply decide(ILoggingEvent event) {
     
        if (event.getMessage().contains("sample")) {
            return FilterReply.ACCEPT; //允许输入串
        } else {
            return FilterReply.DENY; //不允许输出
        }
    }
    }
    它可以提供最大的自定义输出,如果需要用到系统定义的拦截器,例如我们用ThresholdFilter来过滤掉ERROR级别以下的日志不输出到文件中


    ERROR

    encoder和pattern节点组合用于具体输出的日志格式

    file节点用来指明日志文件的输出位置,可以是绝对路径也可以是相对路径

    rollingPolicy日志回滚策略,在这里我们用了TimeBasedRollingPolicy,基于时间的回滚策略,有以下子节点

    fileNamePattern,必要节点,可以用来设置指定时间的日志归档,例如我们上面的例子是每天将日志归档成一个zip包
    maxHistory ,可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,,例如设置为30的话,则30天之后,旧的日志就会被删除
    totalSizeCap,可选节点,用来指定日志文件的上限大小,例如设置为3GB的话,那么到了这个值,就会删除旧的日志

    除了用TimeBasedRollingPolicy策略,我们还可以用SizeAndTimeBasedRollingPolicy,配置子节点的maxFileSize来指定单个日志文件的大小


    mylog.txt

     
      mylog-%d{yyyy-MM-dd}.%i.txt
       
       100MB    
       60
       20GB
       1 
      3 


      %msg%n

    5、root节点,必选节点,用来指定最基础的日志输出级别,他有俩个自己点可以用来应用appender,格式化日志输出





    6、logger节点,可选节点,用来具体指明包的日志输出级别,它将会覆盖root的输出级别

     
     
         
         
         
     
    logger中有一个additivity属性,作用在于 children-logger是否使用 rootLogger配置的appender进行输出。
    false:表示只用当前logger的appender-ref。
    true:表示当前logger的appender-ref和rootLogger的appender-ref都有效。
    这样logger名字匹配com.taobao.jingwei.monitor的信息就只在MONITOR的appender输出,而不会在root logger中输出了

    7、特殊符号

    %logger{36} 表示logger名字最长36个字符,否则按照句点分割。
    logger{length}输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边。

    Conversion specifier    Logger name    Result
    %logger    mainPackage.sub.sample.Bar    mainPackage.sub.sample.Bar
    %logger{0}    mainPackage.sub.sample.Bar    Bar
    %logger{5}    mainPackage.sub.sample.Bar    m.s.s.Bar
    %logger{10}    mainPackage.sub.sample.Bar    m.s.s.Bar
    %logger{15}    mainPackage.sub.sample.Bar    m.s.sample.Bar
    %logger{16}    mainPackage.sub.sample.Bar    m.sub.sample.Bar
    %logger{26}    mainPackage.sub.sample.Bar    mainPackage.sub.sample.Bar
    %d{HH:mm:ss.SSS}输出日志的打印日志,模式语法与java.text.SimpleDateFormat 兼容。看上去%d就已经够好了

    Conversion Pattern    Result
    %d    2006-10-20 14:06:49,812
    %date    2006-10-20 14:06:49,812
    %date{ISO8601}    2006-10-20 14:06:49,812
    %msg%n 其中msg表示打印输出的消息, %n表示换行
    m / msg / message 输出应用程序提供的信息。
    可选的格式修饰符位于“%”和转换符之间。第一个可选修饰符是左对齐标志,符号是减号“-”;
    接着是可选的最小宽度修饰符,用十进制数表示。如果字符小于最小宽度,则左填充或右填充,默认是左填充(即右对齐),填充符为空格。
    如果字符大于最小宽度,字符永远不会被截断。

    t / thread 输出产生日志的线程名。
    p / le / level输出日志级别。

    8、Level有效级别
    Logger可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN和ERROR,定义于ch.qos.logback.classic.Level类。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、 WARN、ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。为确保所有logger都能够最终继承一个级别,根logger总是有级别,默认情况下,这个级别是DEBUG。
     

  • 相关阅读:
    webgl着色器学习 - webpack 打包glsl文件
    什么是无损检测设备?
    【牛客-算法】NC61 两数之和(哈希表的运用,C++)
    数据结构——栈和队列
    ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
    力扣刷题-数组-数组理论基础
    Qt编译数据库插件通用步骤说明
    2023 极术通讯-前沿芯片架构变革趋势
    python通过导入自定义dll实现显存释放
    OpenCV 透视变换
  • 原文地址:https://blog.csdn.net/wufaqidong1/article/details/126050080