前言
之前我的所有配置文件放在Resource目录下,现在我想移到dc_server目录读取配置文件,然后就:
自定义配置文件读取的坑……
探索
项目启动后发布加载不到根目录下的配置文件,一直报这种错误
ERROR in ch.qos.logback.core.joran.action.PropertyAction - Could not find resource [/Users/hyperdai/Projects/java_dcserver/conf/logserver.properties].

各种百度找不到原因,然后开始看源码,定位到PropertyAction类下获取资源文件的地方:

Loader.getResourceBySelfClassLoader(resource);有问题,跟进。

到了ClassLoader.getResource……我还没发现问题,还在谷歌……
比如疯狂看这种彻底搞懂Class.getResource和ClassLoader.getResource的区别和底层原理
然后彻底搞不懂了,没办法,按logback的PropertyAction类源码,模仿写一个案例,自己去调试地址……
比如这样的姿势:

其实我没发现解决根本问题,我一直在加载的是classpath!然后回到问题:怎么加载加载非类路径下的logback配置文件
看了几种方案,包括定时更新的方案,就在准备实现之前,
关于logback.xml加载外部配置文件问题,发现这个作者的问题跟我相反。。。他加载不了类文件,我加载不了外部文件,然后<property file="${app.path}/conf/logserver.properties" />非常舒服的解决了

总结
定位问题很重要,反复说,反复做不到,我想是一种“大佬”和“菜鸟”之间的区别
努力定位问题……更快的DEBUG……
分析问题其实很简单,就是需要讨论方案最优解!就怕发现不了问题!
如果使用file,那么是绝对路径。如果使用resource的话,就是在类路径里寻找了。
本文介绍了在将logback.xml配置文件从Resource目录移至项目根目录后,遇到加载配置文件的问题及解决过程。通过查看源码、理解Class.getResource和ClassLoader.getResource的区别,最终找到解决方案,强调了正确定位问题和调试的重要性。

632

被折叠的 条评论
为什么被折叠?



