先说说 Logback 的定位。这个项目最初就是奔着 log4j 的下一代继承者去的,延续了 log4j 1.x 的核心设计理念和生态兼容性。整个框架在架构层面讲究的是灵活和可扩展,基本能满足各种稀奇古怪的应用场景。目前的主力版本由三个核心模块组成:logback-core 当做基础支撑层,logback-classic 负责跟 SLF4J 无缝对接,logback-access 则专门处理 Servlet 容器的访问日志。
现在,1.5.26 正式版已经发布。这次更新没有大刀阔斧的改动,更多是针对几个关键问题做了打磨。下面挑重点说:
- 模块化兼容性改进:InsertFromJNDIModelHandler 在调用 ja vax.naming 相关类时,现在明确声明了可选的 ja va.naming 模块依赖。这在模块化环境下尤其有用,能避免一些兼容性问题,具体细节对应 issue #1003。
- 影子打包版本的警告修复:不少应用通过 shadow、fat、shade 等方式打包,这往往会导致模块描述符或包元数据丢失。以前要是 logback-classic 读不到版本信息,就会直接报“版本不匹配”警告,挺烦人的。这次更新把版本号内嵌到组件自带的属性文件里,哪怕打成 shade 包,也能准确识别版本信息,不再瞎报警。这个改进对应 issue #1002。
- 构建可复现性:这次发布的二进制文件完全可以通过源码复现。具体指向 GitHub 标签 v_1.5.26 下的 commit 33deb54,构建环境用的是 Ja va "21" 2023-10-17 LTS(版本号 21.0.1.+12-LTS-29),操作系统是 Linux Debian 11.6。想要自己验证的同学,照着搭环境就行。
整体来看,这次更新虽然不是大版本,但解决的都是实际使用中让人头疼的阻塞性问题,尤其是那个 shadow 打包的版本警告,终于彻底根治了。