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}

  

 

posted @ 2024-07-15 11:27  不卷轮子锅  阅读(333)  评论(0编辑  收藏  举报