springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题
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中添加上配置
1 application.yml 2 # 日志目录 默认为当前目录 3 logback: 4 path: jwsb_logs 5 6 spring: 7 profiles: 8 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}
半斤八两开始写BLOG了