日志框架的引入(slf4j+logback)

发布于:2025-07-27 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、简介

重要性:

  • 故障的排查和问题定位

  • 系统监控

  • 数据采集

  • 日志审计

注意事项:

  • 注意日志级别
  • 注意日志内容,日志格式和可读性
  • 避免过度日志记录
  • 注意日志的滚动和归档

为什么选择slf4j+logback

  • 易于切换
  • 配置灵活
  • logback性能更好,集成更方便,功能更强大
  • SpringBoot 默认的日志框架

二、配置文件

  • logback.xml配置:以system为例:

 在resources目录下创建logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志存放路径 -->
    <property name="log.path" value="logs/oj-system" />
    <!-- 日志输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- 系统日志输出 -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 10天 -->
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 10天 -->
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--日志级别-->
    <root level="info">
        <appender-ref ref="file_info" />
        <appender-ref ref="console" />
        <appender-ref ref="file_error" />
    </root>

</configuration>
  • 日志输出格式,下面给出了一些常用的日志格式转换词。更多说明, 参考: Chapter 6: Layouts

  1. %d:日期和时间,可以使用各种格式。在上面的例子中,它使用了 HH:mm:ss.SSS 格式,表示小时、分钟、秒和毫秒。
  2. %thread:产生日志事件的线程名。
  3. %level:日志级别(如 INFO, DEBUG, ERROR 等)。
  4. %logger:产生日志事件的 logger 名,通常用于标识发出日志请求的类或模块。在上面的例子中,%logger{20} 表示 logger 名的最大长度为 20 个字符。
  5. %msg:日志消息,即实际记录的日志内容。
  6. %method表示产生日志事件的方法名
  7. %line表示产生日志事件的行号

滚动策略:

  • TimeBasedRollingPolicy:最常用的滚动策略,它根据时间来制定滚动策略。
  • SizeBasedTriggeringPolicy:基于日志文件大小的滚动策略。当日志文件达到指定的大小时,它会被滚动(即创建一个新的日志文件)。
  • FixedWindowRollingPolicy:固定窗口滚动策略。它根据一个固定的窗口大小(即可以保留的日志文件数量)来滚动日志文件。

日志测试(用get请求去测试管理员登录接口)

如上图打印了日志: 

22:20:13.577 [http-nio-1208-exec-6] ERROR c.q.c.s.h.GlobalExceptionHandler - [handleHttpRequestMethodNotSupported,35] - 请求地址'/sysUser/login',不支持'GET'请求

 


网站公告

今日签到

点亮在社区的每一天
去签到