问题现象
应用启动时出现 Logback 日志框架初始化失败,核心堆栈信息如下:
Failed to auto configure default logger context
Reported exception:
ch.qos.logback.core.joran.spi.JoranException: Parser configuration error occurred
at ch.qos.logback.core.joran.event.SaxEventRecorder.buildSaxParser(SaxEventRecorder.java:89)
...
Caused by: org.xml.sax.SAXNotRecognizedException: unrecognized feature http://xml.org/sax/features/external-general-entities
at org.gjt.xpp.sax2.Driver.setFeature(Driver.java:178)
... 14 more
原因分析
- Logback 初始化时会通过 SAX 解析器读取日志配置文件,依赖完整的 SAX/JAXP 标准实现
- 应用环境中默认使用的 XPP3 解析器 未完整实现 SAX 标准,缺失对
external-general-entities核心特性的支持
解决方案
引入 xercesImpl 依赖(完整兼容 SAX/JAXP 标准的 XML 解析器),该依赖会自动替换系统默认的 XPP3 解析器,支持所有 SAX 标准特性。
依赖配置(Maven)
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.2</version>
</dependency>