nacos+logback-spring.xml的配置异常看过来
本文介绍了logback-spring在Spring Boot中的使用,重点讲解了与Nacos配置中心的集成方法。文章对比了logback-spring和普通Logback的区别,指出logback-spring支持Spring Profile和属性注入的特性。提供了Nacos配置、application.yaml和logback-spring.xml的完整配置示例,特别强调了必须使用<sp
前言
最近有点忙,各项工作都忙,其实要复盘的东西很多,今天就先复盘下日志(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!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)