[logback] 关于logback.xml加载非类路径配置文件 - 问题排查与解决

时间:2024-04-06 20:08:35

前言

之前我的所有配置文件放在Resource目录下,现在我想移到dc_server目录读取配置文件,然后就:

自定义配置文件读取的坑……

探索

项目启动后发布加载不到根目录下的配置文件,一直报这种错误
ERROR in ch.qos.logback.core.joran.action.PropertyAction - Could not find resource [/Users/hyperdai/Projects/java_dcserver/conf/logserver.properties].
[logback] 关于logback.xml加载非类路径配置文件 - 问题排查与解决
各种百度找不到原因,然后开始看源码,定位到PropertyAction类下获取资源文件的地方:
[logback] 关于logback.xml加载非类路径配置文件 - 问题排查与解决
Loader.getResourceBySelfClassLoader(resource);有问题,跟进。

[logback] 关于logback.xml加载非类路径配置文件 - 问题排查与解决
到了ClassLoader.getResource……我还没发现问题,还在谷歌……

比如疯狂看这种彻底搞懂Class.getResource和ClassLoader.getResource的区别和底层原理

然后彻底搞不懂了,没办法,按logback的PropertyAction类源码,模仿写一个案例,自己去调试地址……

比如这样的姿势:
[logback] 关于logback.xml加载非类路径配置文件 - 问题排查与解决
其实我没发现解决根本问题,我一直在加载的是classpath!然后回到问题:怎么加载加载非类路径下的logback配置文件

看了几种方案,包括定时更新的方案,就在准备实现之前,

关于logback.xml加载外部配置文件问题,发现这个作者的问题跟我相反。。。他加载不了类文件,我加载不了外部文件,然后<property file="${app.path}/conf/logserver.properties" />非常舒服的解决了
[logback] 关于logback.xml加载非类路径配置文件 - 问题排查与解决

总结

定位问题很重要,反复说,反复做不到,我想是一种“大佬”和“菜鸟”之间的区别
努力定位问题……更快的DEBUG……
分析问题其实很简单,就是需要讨论方案最优解!就怕发现不了问题!

如果使用file,那么是绝对路径。如果使用resource的话,就是在类路径里寻找了。