SpringBoot日志管理 —— 解决Logback生成 “LOG_PATH_IS_UNDEFINED“ 文件夹问题

问题背景

在我们的SpringBoot项目中,我们使用Logback作为我们的日志框架。我们注意到在项目的根路径下面出现了一个名为 LOG_PATH_IS_UNDEFINED 的文件夹,我们所有的日志文件都在这个文件夹中。定义的日志文件并没有在指定的路径中生成。

原因分析

经过分析推测是 logback 配置文件存在问题,因为日志的输出格式是正确的,生成的文件也是正确,文件存放路径是错误的,应该是路径配置出现了问题,这里有一个代码片段:

xml 复制代码
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="TRACE_FILE">
    <file>${LOG_PATH}/trace.log</file>
    ...
  </appender>
  ...
  <property name="LOG_PATH" value="./logs"/>

在这段代码中,LOG_PATH是我们定义的一个变量,它被用来指定我们日志文件的路径。但是问题在于,我们在使用这个变量的地方(file元素的LOG_PATH)之前,我们就需要它的值,这导致在logback尝试解析${LOG_PATH}的时候,它并没有找到对应的值,于是作为默认值,logback就使用了LOG_PATH_IS_UNDEFINED

解决方法

解决这个问题的方法是需要保证我们在使用LOG_PATH变量之前定义它。我们可以将定义LOG_PATH的那行代码移动到<configuration>标签的开头:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <property name="LOG_PATH" value="./logs"/>
  ...
</configuration>

要避免这种问题的发生,需要确保在使用任何变量之前都已经定义了它。特别是在配置文件中,我们需要明确知道配置文件的解析顺序,也就是说,当使用某个配置属性时,必须确保它已经在之前的位置被定义。如果在使用的地方之前没有定义,将会导致未定义的默认值(如本例中的 "LOG_PATH_IS_UNDEFINED")被使用。

相关推荐
Yeats_Liao几秒前
14:Servlet中的页面跳转-Java Web
java·后端·架构
武子康27 分钟前
调查研究-201 Rust 里的 dev build 和 release build:为什么同一份代码性能差这么多?
后端·架构·rust
鹤望兰67529 分钟前
字节跳动国际支付-后端开发-三面面经
java
石小石Orz30 分钟前
AI具身交互:实现一个会说话的3D虚拟伴侣
前端·人工智能·后端
Ai拆代码的曹操31 分钟前
容器 CPU Throttling 有多坑?K8s CFS 限制让 P99 慢了 16 倍
后端
夕阳与风馨32 分钟前
大文件(20GB+)SFTP 下载模块设计与实现
后端·架构
Flittly35 分钟前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
Dilee38 分钟前
Spring AI 2.0.0 接 Skill 最小 Demo:SkillsTool 加载 SKILL.md 一次跑通
后端
zoulee2439 分钟前
doris-python:让 SQLAlchemy 玩转 Apache Doris 多驱动生态
后端
RainCity40 分钟前
Java Swing 自定义组件库分享(十二)
java·笔记·后端