Logback 日志初始化失败:XPP3 解析器不兼容 SAX 标准问题解决

10 阅读1分钟

问题现象

应用启动时出现 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

原因分析

  1. Logback 初始化时会通过 SAX 解析器读取日志配置文件,依赖完整的 SAX/JAXP 标准实现
  2. 应用环境中默认使用的 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>