logback现在基本上已经成为springboot日志框架中使用最多的日志实现,在使用中与各中间件集成的一些注意事项记录如下
一 Spring Boot 中 logback 读取application.properties(application.yml) 中的属性
其中使用的时候发现了一个问题,就是如果使用的lobback配置文件的名称是logback.xml 会先出现先找不到设置的属性,然后项目启动起来才会找到, 比如:
<springProperty scope="context" name="log.path" source="logback.path" defaultValue="logs"/>
说明:其中 source="logback.path" 为 application.properties 中对应的配置节
name="log.path" 为 日志中可以实际使用的配置节点
<!-- 日志存放路径 -->
<springProperty scope="context" name="logback.path" source="logback.path"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<appender name="jwsbapi" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logback.path}/jwsbapi-info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${logback.path}/jwsbapi.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</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>
日志生成路径会取自source="logback.path" 对应的application.yml中配置的节点路径信息
记录日志文件存放地址属性,会在项目启动的时候想出现一个找不到log.path_is_UNDIFIND 的目录,项目启动起来后才会读取到属性,在配置路径上生成日志文件。 SpringBoot 配置文件的加载顺序
logback.xml—>application.properties(application.yml)—>logback-spring.xml
二 问题原因分析
在正常情况下,将logback.xml修改为logback-spring.xml即可解决问题的。
三 集成nacos配置中心时
如果项目集成nacos配置中心功能后,为防止以上问题,需要在项目的application.yml中添加上配置
application.yml
日志目录 默认为当前目录
logback:
path: jwsb_logs
spring:
profiles:
active: demo
再在nacos配置中心的配置文件中添加 相应的配置,才可以处理掉 log.path_is_UNDIFIND,根本原因还是配置文件的加载顺序导致的#nacos 配置信息
base:
#nacos配置中心基础信息
nacos_host_master: 127.0.0.1
nacos_host_master_port: 8015
nacos_username: "nacos"
nacos_password: "nacos"
# 注意,发布时要切换到自己的 服务namespace 在nacos中查询即可
nacos_namespace: nacos_namespace
# nacos配置中心相关配置
nacos:
config:
bootstrap:
enable: true
server-addr: ${base.nacos_host_master}:${base.nacos_host_master_port}
type: yaml
# 分组
group: DEFAULT_GROUP
namespace: ${base.nacos_namespace}
data-ids: db.yml,sms.yml,site.yml,maojian.yml
auto-refresh: true
username: ${base.nacos_username}
password: ${base.nacos_password}