• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

logback 基本使用

武飞扬头像
凉城孤影研发
帮助1

logback 的三部分结构:appender、root、logger

  • appender
    encoder:确定将事件写入基础的方式OutputStreamAppender
    filter:过滤此日志文件只记录xx级别的日志
    rollingPolicy:日志记录器的滚动策略【此文重点问题坑】
  • root
    打印控制台,跟着 ref
    1.  
      <root level="info">
    2.  
      <appender-ref ref="CONSOLE"/>
    3.  
      <appender-ref ref="INFO_FILE"/>
    4.  
      <appender-ref ref="ERROR_FILE"/>
    5.  
      </root>

    MaxHistory 属性日志文件保留天数不生效问题

  • MaxHistory 属性可以按“文件数量、小时、天、月、年”等策略实现文件保留。但是很多人都遇到过此配置不生效问题,网上都只介绍了 cleanHistoryOnStart ,而我是另一种情况,这里汇总一下。
    1.  
      <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
    2.  
      <contextName>logback</contextName>
    3.  
      <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    4.  
      <property name="log.path" value="../logs/worknotice"/>
    5.  
       
    6.  
      <!-- 时间滚动输出 level为 INFO 日志 -->
    7.  
      <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    8.  
      <!-- 正在记录的日志文件的路径及文件名 -->
    9.  
      <file>${log.path}/log_info.log</file>
    10.  
      <!--日志文件输出格式-->
    11.  
      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    12.  
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    13.  
      <charset>UTF-8</charset>
    14.  
      </encoder>
    15.  
      <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
    16.  
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    17.  
      <!-- 每天日志归档路径以及格式,编码器 -->
    18.  
      <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    19.  
      <!--每个文件最多100MB-->
    20.  
      <maxFileSize>100MB</maxFileSize>
    21.  
      <!--日志文件保留天数-->
    22.  
      <maxHistory>15</maxHistory>
    23.  
      <!--每个文件最多100MB,保留15天的历史记录,但最多20GB-->
    24.  
      <totalSizeCap>20GB</totalSizeCap>
    25.  
      <!--重启清理日志文件-->
    26.  
      <cleanHistoryOnStart>true</cleanHistoryOnStart>
    27.  
      </rollingPolicy>
    28.  
      <!-- 此日志文件只记录info级别的 -->
    29.  
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
    30.  
      <level>info</level>
    31.  
      <onMatch>ACCEPT</onMatch>
    32.  
      <onMismatch>DENY</onMismatch>
    33.  
      </filter>
    34.  
      <!-- 另外一种配置日志文件方式如下这样的话就把error 和info日志区分开-->
    35.  
      <!-- 自定义高亮颜色 -->
    36.  
      <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    37.  
      <withJansi>false</withJansi>
    38.  
      <encoder>
    39.  
      <pattern>
    40.  
      %d{yyyy-MM-dd HH:mm:ss.SSS} %-10([%thread]) %-5level %logger{50} (%file:%line\) - %msg%n
    41.  
      </pattern>
    42.  
      <charset>UTF-8</charset>
    43.  
      </encoder>
    44.  
      </appender>
    45.  
       
    46.  
      <!-- info⽇志 -->
    47.  
      <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    48.  
      <!-- 过滤⽇志 -->
    49.  
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
    50.  
      <level>ERROR</level>
    51.  
      <onMatch>DENY</onMatch> <!-- 如果命中就禁⽌这条⽇志 -->
    52.  
      <onMismatch>ACCEPT</onMismatch> <!-- 如果没有命中就使⽤这条规则 -->
    53.  
      </filter>
    54.  
      <encoder>
    55.  
      <pattern>${LOG_PATTERN}</pattern>
    56.  
      </encoder>
    57.  
      <!-- 滚动策略 -->
    58.  
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    59.  
      <!-- 设置info⽇志路径 -->
    60.  
      <fileNamePattern>log/info.%d.log</fileNamePattern>
    61.  
      </rollingPolicy>
    62.  
      </appender>
    63.  
      <!-- error⽇志 -->
    64.  
      <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    65.  
      <!-- 过滤⽇志 -->
    66.  
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    67.  
      <level>ERROR</level>
    68.  
      </filter>
    69.  
      <encoder>
    70.  
      <pattern>${LOG_PATTERN}</pattern>
    71.  
      </encoder>
    72.  
      <!-- 滚动策略 -->
    73.  
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    74.  
      <!-- 设置error⽇志路径 -->
    75.  
      <fileNamePattern>log/error.%d.log</fileNamePattern>
    76.  
      </rollingPolicy>
    77.  
      </appender>
    78.  
      <!-- ⽇志输出级别 -->
    79.  
      <root level="INFO">
    80.  
      <appender-ref ref="console" />
    81.  
      <appender-ref ref="fileInfoLog" />
    82.  
      <appender-ref ref="fileErrorLog" />
    83.  
      </root>
    84.  
      </appender>
    学新通

    另外还可以这样配置

  1.  
    <?xml version="1.0" encoding="UTF-8"?>
  2.  
    <configuration scan="true" scanPeriod="30 seconds" debug="false">
  3.  
    <contextName>project</contextName>
  4.  
    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
  5.  
    <property name="log.path" value="log/project" />
  6.  
    <property name="log.maxHistory" value="3" />
  7.  
    <property name="log.colorPattern" value="%magenta(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %boldCyan([${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]) %yellow(%thread) %green(%logger) %msg%n"/>
  8.  
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level [${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}] %thread %logger %msg%n"/>
  9.  
     
  10.  
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  11.  
    <encoder>
  12.  
    <pattern>${log.colorPattern}</pattern>
  13.  
    </encoder>
  14.  
    </appender>
  15.  
     
  16.  
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
  17.  
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  18.  
    <fileNamePattern>${log.path}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
  19.  
    <MaxHistory>${log.maxHistory}</MaxHistory>
  20.  
    </rollingPolicy>
  21.  
    <encoder>
  22.  
    <pattern>${log.pattern}</pattern>
  23.  
    </encoder>
  24.  
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
  25.  
    <level>INFO</level>
  26.  
    <onMatch>ACCEPT</onMatch>
  27.  
    <onMismatch>DENY</onMismatch>
  28.  
    </filter>
  29.  
    </appender>
  30.  
    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
  31.  
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  32.  
    <fileNamePattern>${log.path}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
  33.  
    </rollingPolicy>
  34.  
    <encoder>
  35.  
    <pattern>${log.pattern}</pattern>
  36.  
    </encoder>
  37.  
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
  38.  
    <level>ERROR</level>
  39.  
    <onMatch>ACCEPT</onMatch>
  40.  
    <onMismatch>DENY</onMismatch>
  41.  
    </filter>
  42.  
    </appender>
  43.  
    <root level="debug">
  44.  
    <appender-ref ref="console" />
  45.  
    </root>
  46.  
    <root level="info">
  47.  
    <appender-ref ref="file_info" />
  48.  
    <appender-ref ref="file_error" />
  49.  
    </root>
  50.  
    </configuration>
学新通
  • 原因分析与解决方案

  • 大家项目中大多数配置方式都与上面类似,这里面最常见的问题就是日志保留天数配置 maxHistory 无效,不能自动删除过期日志文件。原因可能如下:

  • 1、fileNamePattern 配置的是月、年等,而你想要的是天, 这里检查一下配置方式是否与预期相符——属细节问题
  • 2、配置 cleanHistoryOnStart 属为 true 即可——这是网上解释最多遇到最多的一点。
  • 3、结构类-我遇到的问题:前面介绍了,lgoback 要有 appender、root、logger 三个级别,这里要对应上
    • appender name=“INFO_FILE” 要在 root 里进行引用
      <appender-ref ref="INFO_FILE"/>
    • <root level="info">要与 logger 下的 level=“info” 对应。——这是我遇到的问题
  • 优化类:建议追加最大配置,按照实际业务情况配置 totalSizeCap ,避免占用磁盘空间。(作用是,假如你诉求是 maxHistory 保留7天日志文件,但是可能这7个文件总大小超出磁盘容量,所以可以通过 totalSizeCap 来控制总大小,这样系统会判断大于此值时进行自动覆

    maxHistory

    可选的 maxHistory 属性控制要保留的归档文件的最大数量,以异步方式删除较旧的文件。例如,如果您指定每月滚动,并将maxHistory设置为6,则将保留6个月的归档文件,并删除6个月以上的文件。请注意,由于删除了旧的归档日志文件,因此将适当删除为日志文件归档而创建的所有文件夹。

    totalSizeCap

    可选的totalSizeCap 属性控制所有存档文件的总大小。当超过总大小上限时,最早的档案将被异步删除。该totalSizeCap属性要求maxHistory属性设置为好。此外,始终会首先应用“最大历史记录”限制,然后再应用“总大小上限”限制。

    cleanHistoryOnStart

    如果设置为true,则将在追加程序启动时执行归档删除。默认情况下,此属性设置为false。
    通常在过渡期间执行归档删除。但是,某些应用程序的生存时间可能不足以触发翻转。因此,对于这种短暂的应用程序,归档删除可能永远不会有执行的机会。通过将cleanHistoryOnStart设置为true,将在附加程序启动时执行归档删除。

    fileNamePattern 值及其作用说明

  • 学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfkcee
系列文章
更多 icon
同类精品
更多 icon
继续加载