Spring Boot集成logback出现log.dir_IS_UNDEFINED问题——未完全解决

Spring Boot集成logback出现log.dir_IS_UNDEFINED问题——未完全解决

缘起

公司新创建了一个项目,搭建基础框架,本地启动时总会在项目根路径出现一个log.dir_IS_UNDEFINEDlog.dir是我配置的logback日志的根目录,配置在bootsrap-xxx.yml

Spring Boot 3.x
Spring Boot Web Starter 3.2.5(引入了logback1.4.14)

logback-spring.xml相关配置如下:

<configuration debug="false" scan="false">
	<!-- 读取spring boot配置 -->
    <springProperty scope="context" name="log.dir" source="log.dir" />
    <property name="projectName" value="xxx-user" />
   
    <appender name="infoAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.dir}/${projectName}_info.log</file>
        <!-- ... 省略其它分割日志规则配置 -->
    </appender>
 	<!-- ... 省略其它appender -->
    <root>
        <level value="INFO" />
        <appender-ref ref="infoAppender"/>
    </root>
</configuration>

bootstrap.yml配置如下:

log:
  dir: /data/xxx/xxx-user/logs

jasypt惹的祸

因为依赖不多,发现去掉

 <dependency>
     <groupId>com.github.ulisesbocchio</groupId>
     <artifactId>jasypt-spring-boot-starter</artifactId>
 </dependency>

不会出现这个问题,查了下jasypt有自己的加载顺序,虽然知道可能是jasypt的问题,但这个组件不能去掉,只能想别的办法。

Spring Boot中logback加载顺序

chatgpt上查到:

在Spring Boot中,Logback的加载顺序如下:
logback-spring.xml 或 logback.xml:这是默认的配置文件,位于项目的src/main/resources目录下。如果存在,它将被首先加载。
logback-spring.groovy 或 logback.groovy:如果项目中有这些文件,它们将在logback-spring.xml或logback.xml之后加载。
logback-spring.json 或 logback.json:如果项目中有这些文件,它们将在上述XML和Groovy配置文件之后加载。
系统属性:如果在启动时设置了-Dlogback.configurationFile属性,那么指定的配置文件将被加载。例如,-Dlogback.configurationFile=my-logback.xml将加载名为my-logback.xml的文件。
类路径下的logback-test.xml:如果在测试环境中运行应用程序,并且希望使用不同的日志配置,可以在类路径下添加一个名为logback-test.xml的文件。这将覆盖其他配置文件中的设置。
需要注意的是,如果有多个相同类型的配置文件(如logback-spring.xml),只有第一个找到的配置文件会被加载。

因为要读取bootstrap.yml的配置,我用的是logback-spring.xml这个名字,讲道理只会加载一次,但我在启动日志中找到了两处加载日志,一次是在启动最开始,另一次紧挨着jasypt,部分日志如下:

第一次看到的
10:38:08,823 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[infoAppender] - Active log file name: /data/xxx/xxx-user/logs/xxx-user_info.log
10:38:08,823 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[infoAppender] - File property is set to [/data/xxx/xxx-user/logs/xxx-user_info.log]
第二次看到的
[2024-07-04 10:38:09,301] [main] [INFO ] [com.ulisesbocchio.jasyptspringboot.EncryptablePropertySourceConverter:110] [] [] [] - Converting PropertySource applicationConfig: [classpath:/bootstrap.yml] [org.springframework.boot.env.OriginTrackedMapPropertySource] to EncryptableMapPropertySourceWrapper
10:38:09,497 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[infoAppender] - Active log file name: log.dir_IS_UNDEFINED/xxx-user_info.log
10:38:09,497 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[infoAppender] - File property is set to [log.dir_IS_UNDEFINED/xxx-user_info.log]

根据上面的日志,发现第一次是我正确配置的,说明还是读取到了动态配置,第二次就比较耐人寻味了,能力比较菜,在jasypt找了好久的原因也没找到。只能想别的办法了。

尝试指定配置文件

bootstrap.yml尝试指定配置文件,添加

logging:
  config: classpath:logback-spring.xml

重新启动发现问题还在,忽然意识到logback-spring.xml这个名字有点特殊,换个名字试试:

logging:
  config: classpath:logback-custom.xml

发现居然没问题了。

解决方案总结

bootstrap.yml配置如下:

logging:
  config: classpath:logback-custom.xml
log:
  dir: /data/xxx/xxx-user/logs

logback-custom.xml(不要使用logback.xmllogback-spring.xml

<!-- 部分配置 -->
<configuration debug="false" scan="false">
	<!-- 读取spring boot配置 -->
    <springProperty scope="context" name="log.dir" source="log.dir" />
    <property name="projectName" value="xxx-user" />
   
    <appender name="infoAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.dir}/${projectName}_info.log</file>
        <!-- ... 省略其它分割日志规则配置 -->
    </appender>
 	<!-- ... 省略其它appender -->
    <root>
        <level value="INFO" />
        <appender-ref ref="infoAppender"/>
    </root>
</configuration>

-----------20240705分割线-----------
用了几天发现,日志无法输出到文件,根本就不显示打出的日志,不知道为啥,后续我又改回了logback.xml这个名字,去掉了springProperty这个标签,现在着急启动项目,先挖个坑,后面找下原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/780523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里通义音频生成大模型 FunAudioLLM 开源!

01 导读 人类对自身的研究和模仿由来已久&#xff0c;在我国2000多年前的《列子汤问》里就描述了有能工巧匠制作出会说话会舞动的类人机器人的故事。声音包含丰富的个体特征及情感情绪信息&#xff0c;对话作为人类最常使用亲切自然的交互模式&#xff0c;是连接人与智能世界…

【Docker系列】Docker 命令行输出格式化指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

《昇思25天学习打卡营第12天|onereal》

CycleGAN图像风格迁移互换 模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络&#xff0c;来自论文 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 。该模型实现了一种在没有配对示例的情况下学习将图像从源域…

Ubuntu 安装CGAL

一、什么是CGAL CGAL&#xff08;Computational Geometry Algorithms Library&#xff09;是一个广泛使用的开源库&#xff0c;主要用于计算几何算法的实现。该库提供了一系列高效、可靠和易于使用的几何算法和数据结构&#xff0c;适用于各种应用领域。以下是 CGAL 的主要功能…

汽车报价资讯app小程序模板源码

蓝色实用的汽车报价&#xff0c;汽车新闻资讯&#xff0c;最新上市汽车资讯类小程序前端模板。包含&#xff1a;选车、资讯列表、榜单、我的主页、报价详情、资讯详情、询底价、登录、注册、车贷&#xff0c;油耗、意见反馈、关于我们等等。这是一款非常全的汽车报价小程序模板…

VMware CentOS7 Linux 网络配置

本文主要描述VMware虚拟机的网络配置。 如上所示&#xff0c;在CentOS Linux虚拟机中设置网络连接使用桥接模式&#xff0c;该模式对接主机物理网络&#xff0c;直接由主机的物理网络的DHCP服务器动态分配IP地址&#xff0c;或者在CentOS Linux的操作系统的网络配置中设置静态的…

Stowaway搭建隧道打CFS内网靶场

目录 渗透带出主机阶段 先把我们的服务端上传到kali ​先把我们的客户端上传到目标机 客户端去连接我们的kali机端口去上线 出现admin&#xff0c;上线成功 detail相当于msf的sessions​ 和msf差不多功能&#xff0c;但是我们用它主要是搞隧道代理 抓发的 ​开启socks…

SQL之delete、truncate和drop区别

MySQL删除数据的方式都有哪些&#xff1f; 常用的三种删除方式&#xff1a;通过 delete、truncate、drop 关键字进行删除&#xff1b;这三种都可以用来删除数据&#xff0c;但场景不同。 一、从执行速度上来说 drop > truncate >> DELETE;二、从原理上讲 1、DELET…

多模态MLLM都是怎么实现的(11)--从SadTalker到快手LivePortait

我之前出差带休假差不多两个礼拜吧&#xff0c;今天回北京更新一篇 我确实找到了一个有意思的东西&#xff0c;LivePortrait 这东西开源了&#xff0c;你可以认为是目前做得最好的"Sadtalker"&#xff0c;国内也有dream-talker&#xff0c;EMO之类的。 我之前看EMO的…

一文详解多层感知机(MLP)

文章目录 What(是什么)Where&#xff08;用在哪&#xff09;How&#xff08;怎么用&#xff09;多层感知机解决分类问题&#xff08;以minist分类为例&#xff09;多层感知机解决回归问题多层感知机解决噪声处理的问题 What(是什么) 多层感知机&#xff08;Multilayer Perceptr…

A Threat Actors 出售 18 万名 Shopify 用户信息

BreachForums 论坛成员最近发布了涉及 Shopify 的重大数据泄露事件。 据报道&#xff0c;属于近 180,000 名用户的敏感数据遭到泄露。 Shopify Inc. 是一家总部位于安大略省渥太华的加拿大公司。 开发和营销同名电子商务平台、Shopify POS 销售点系统以及专用于企业的营销工…

Vue3+.NET6前后端分离式管理后台实战(二十九)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(二十九)

Idea新增Module报错:sdk ‘1.8‘ type ‘JavaSDK‘ is not registered in ProjectJdkTable

文章目录 一&#xff0c;创建Module报错二&#xff0c;原因分析三&#xff0c;解决方案1&#xff0c;点击上图的加号&#xff0c;把JDK8添加进来即可2&#xff0c;点击左侧[Project]&#xff0c;直接设置SDK为JDK8 四&#xff0c;配置检查与验证 一&#xff0c;创建Module报错 …

网络基础:IS-IS协议

IS-IS&#xff08;Intermediate System to Intermediate System&#xff09;是一种链路状态路由协议&#xff0c;最初由 ISO&#xff08;International Organization for Standardization&#xff09;为 CLNS&#xff08;Connectionless Network Service&#xff09;网络设计。…

数据统计与数据分组18-25题(30 天 Pandas 挑战)

数据统计与数据分组 1. 知识点1.18 分箱与统计个数1.19 分组与求和统计1.20 分组获取最小值1.21 分组获取值个数1.22 分组与条件查询1.23 分组与条件查询及获取最大值1.24 分组及自定义函数1.25 分组lambda函数统计 2. 题目2.18 按分类统计薪水&#xff08;数据统计&#xff09…

关于忠诚:忠于自己的良知、理想、信念

关于忠诚&#xff1a; 当我们面对公司、上司、爱人、恋人、合作伙伴还是某件事&#xff0c;会纠结离开还是留下&#xff0c;这里我们要深知忠诚的定义&#xff0c;我们不是忠诚于某个人、某件事、或者某个机构&#xff0c;而是忠诚于自己的良知&#xff0c;忠诚于自己的理想和…

pin是什么?管脚

1.平面分割 1)启动Allegro PCB design &#xff0c;打开.brd。深色部分属于一个net&#xff0c;要做一下修改&#xff0c;将上面的pin包含进shape中&#xff0c;i进行a&#xff0c;b两步操作&#xff0c;删除以前存在的Anti Etch下的line&#xff0c;再将其进行补齐 使它保住上…

grpc-go客户端接口添加

【1】 proto相关文件同服务端&#xff0c;如已经生成&#xff0c;可以直接使用服务端的文件&#xff08;包&#xff09; 【2】新建一个目录“WHG_CLIENT”&#xff0c;目录下新建一个main.go文件 package mainimport ("context""log""grpc-go-maste…

Spring的核心概念理解案列

IDEA开发的简单“登陆成功”小项目 IDEA项目结构&#xff1a; 每一部分代码和相应的解读&#xff1a; com.itTony文件下有dao&#xff08;实体&#xff09;层&#xff0c;service&#xff08;服务&#xff09;层&#xff0c;编写的2个类&#xff08;HelloSpring和TestSpring&…

RK3588编译rkmpp,拉取海康威视网络摄像头264码流并运行yolo

硬件&#xff1a;EVB评估版 SOC&#xff1a;Rockchip RK3588 背景&#xff1a; 由于项目需要&#xff0c;需要拉取264码流&#xff0c;并通过将yolov5s.pt将模型转化为rknn模型&#xff0c;获取模型分析结果。取流可以通过软件解码或者硬件解码&#xff0c;硬件解码速度更快&…