前言

        最近有点忙,各项工作都忙,其实要复盘的东西很多,今天就先复盘下日志(logback-spring)方面的吧,也不多讲废话。


一、logback-spring是什么

        logback-spring 是 Logback 日志框架与 Spring Boot 深度整合的模块,专为 Spring Boot 应用优化。

1、与普通 Logback 的区别

  • logback.xml vs logback-spring.xml

  • Spring Boot 默认优先加载 logback-spring.xml(而非 logback.xml),以便使用 Spring 特有的功能。

  • 在 logback-spring.xml 中可通过 或 直接引用 Spring 的配置(如 application.properties)。

  • Profile 支持
    支持 Spring 的 profile 概念,按环境(dev/test/prod)动态配置日志。

2、在 Spring Boot 中的使用

  • Spring Boot 的 spring-boot-starter-logging 默认使用 Logback,只需在 resources 下放置 logback-spring.xml 即可覆盖默认配置。
  • 使用 logback-spring.xml 可确保 Spring 特性生效,尤其在需要多环境差异化配置时。

3、适用场景

  • 需要与 Spring Boot 属性管理(如 application.yml)结合时。
  • 需按不同环境(Profile)动态切换日志配置时。
  • 希望避免硬编码路径、级别等配置,通过 Spring 灵活注入时。

二、使用步骤

        今天这里要分享的是配合nacos的微服务的使用,有些朋友可能经常遇到生成日志的时候,会在一个logging.file.path_IS_NOT_DEFINED的目录下生成.log文件。其实这就是你的logback-spring.xml里写错了,这里不浪费大家时间,给个正确配置先。

1.nacos的配置

logging:
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%X{traceId}] - %msg%n"
    file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%X{traceId}] - %msg%n"
  file:
    path: ./logs
    ##name: ${logging.file.path}/${spring.application.name}-${spring.profiles.active}.log
  level:
    root: info
  logback:
    rolling-policy:
      max-file-size: 50MB
      max-history: 30
      total-size-cap: 1GB

注意:traceId是我自定义的参数,我这里是做请求链路用的,在网关的过滤器、服务的过滤器里通过MDC处理的,大家没有用到的可以去掉。也可能大家用的key不叫traceId。

2.application.yaml配置

spring:
  application:
    name: gov-admin-service
  profiles:
    active: local

logging:
  file:
    path: ./logs
  level:
    root: info

这里是精简的log需要的配置,根据大家情况,自己扩张。

3.logback-spring.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">

    <!-- application的配置 -->
    <property name="ENV" value="${spring.profiles.active}"/>

    <!-- nacos的配置 -->
    <springProperty scope="context" name="APP_NAME" source="spring.application.name"/>
    <springProperty scope="context" name="LOG_PATH" source="logging.file.path"/>
    <springProperty scope="context" name="PATTERN-CONSOLE" source="logging.pattern.console"/>
    <springProperty scope="context" name="PATTERN-FILE" source="logging.pattern.file"/>
    <springProperty scope="context" name="FILE-MAX-FILE-SIZE" source="logging.logback.rolling-policy.max-file-size"/>
    <springProperty scope="context" name="FILE-MAX-HISTORY" source="logging.logback.rolling-policy.max-history"/>
    <springProperty scope="context" name="FILE-TOTAL-SIZE-CAP" source="logging.logback.rolling-policy.total-size-cap"/>


    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${PATTERN-CONSOLE}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 文件输出(按天滚动) -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APP_NAME}-${ENV}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天滚动一个文件,保留30天 -->
            <fileNamePattern>${LOG_PATH}/${APP_NAME}-${ENV}-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxFileSize>${FILE-MAX-FILE-SIZE}</maxFileSize>
            <maxHistory>${FILE-MAX-HISTORY}</maxHistory>
            <totalSizeCap>${FILE-TOTAL-SIZE-CAP}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${PATTERN-FILE}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 根日志配置 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

    <!-- 单独配置包日志级别(可选) -->
    <logger name="com.rs" level="DEBUG" />

</configuration>

大家自行理解下nacos里的配置与这里的配置读取吧。
记住一定要清楚,读取nacos的配置为啥要用springProperty,而不是property。


总结

  • springProperty是springboot的logback-spring.xml的御用读取配置
  • 一定要清楚nacos的配置不是property可以读取到的哦
  • Logback 是独立于 Spring 的日志框架,原生 仅支持:直接复制、JVM属性
  • Spring 的配置(如 application.yaml)需通过 Environment 抽象访问,而 背后调用了 Environment.getProperty()
           今天也是看那个IS_NOT_DEFINED目录不爽,杠上了。希望能帮到大家,uping!
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐