10.日志中间件

1.核心:SLF4J 提供统一的API,隔离具体实现,Logback / Log4j2 是具体实现。

2.核心配置文件(logback.xml 必须放在resources目录下,否则需在web.xml配置)

  • ① 常量定义:日志格式、存储路径、编码方式

    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{30} - %msg%n"/>
    <!--                                      日志时间              线程名     日志级别   日志类名    具体内容 换行符--> 
    <!--                                                                      INFO    类全限定名(无限长度) -->
    
    <property name="LOG_DIR" value="F:/logs/springmvc"/>
    <!-- 路径:
        /logs/springmvc 保存在Tomcat所在磁盘(如C盘)
        ../logs/springmvc 则保存在Tomcat目录下(如C:\tomcat9.0\logs\springmvc)
        F:/logs/springmvc 自定义路径
        ★ “/”不能用“\”,且logback会自动创建目录结构
    可以正常输出到控制台,但无法写入文件,通常是权限不足导致
    -->
    
    <property name="CHARSET" value="UTF-8"/>
    
  • ② 定义日志输出规则(Appender):以文件输出为例

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>${LOG_DIR}/app.log</file>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <fileNamePattern>${LOG_DIR}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
          <!-- 关键:%d{yyyy-MM-dd} 是按天分割的核心格式,%d{yyyy-MM}则是按月 -->
          <maxHistory>30</maxHistory>
      </rollingPolicy>
      <encoder> <!-- 日志格式配置(即日志长什么样子) -->
          <pattern>${LOG_PATTERN}</pattern>
          <charset>${LOG_CHARSET}</charset>
      </encoder>
    </appender>
    

    时间+大小双条件:一天文件过大生成多个文件

    <fileNamePattern>${LOG_DIR}/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
      <maxFileSize>50MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <maxIndex>10</maxIndex> <!-- 每天最多10个文件。 -->
    
  • ③ 定义过滤规则(logger/root)

    <!-- 自定义类日志,需输出到哪个文件: -->
    <logger name="com.yh.service.OrderService" level="INFO" additivity="false">
     <!-- additivity如果不设置,这类日志会输出到当前Appender和根日志的Appender(即重复输出)-->
      <!-- 该类的全限定名,如果多个类要使用相同的日志配置,只需配置包名即可 -->
      <appender-ref ref="ORDER_SERVICE_FILE"/>
      <appender-ref ref="CONSOLE"/> <!-- 同时输出到控制台 -->
    </logger>
    
    <!-- 根日志(其他类的日志默认走这里): -->
    <root level="INFO">
      <appender-ref ref="ALL_FILE"/>
    </root>
    

3.使用步骤

  • ① 导入logback相关依赖到项目中,最佳搭配:

    servlet 4.0.1
    slf4j 1.7.32
    logback-classic 1.2.10
    logback-core 1.2.10
    

    在Tomcat的localhost.log里出现“Servlet [springmvc]标记为不可用”,是因为pom.xml里的slf4j-api版本与SpringFramework冲突。

  • ② 将logback.xml直接拷贝到resources下

  • ③ 创建logback框架提供的Logger对象,然后用Logger对象调用其提供的方法,就可以记录系统的日志信息:

    public static final Logger LOGGER = LoggerFactory.getLogger(Class对象);// 一个项目中只需要一个日志对象
    
posted @ 2025-12-02 23:19  那就改变世界吧  阅读(4)  评论(0)    收藏  举报