如何禁用Hibernate中HHH90000014特定弃用日志而非全部警告?
如何仅禁用Hibernate中特定的HHH90000014弃用警告
当然可行!你完全不需要禁用整个org.hibernate.orm.deprecation日志器的输出,只需要精准过滤掉包含HHH90000014的那条特定警告就行。具体实现取决于你项目使用的日志框架,下面是两种最常用框架的配置方案:
Logback 配置方式
Logback支持通过自定义过滤器匹配日志内容并拦截。你需要在logback.xml(或Spring项目的logback-spring.xml)中,给org.hibernate.orm.deprecation日志器添加如下过滤规则:
<logger name="org.hibernate.orm.deprecation" level="WARN"> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator> <!-- 检查日志消息是否包含目标错误码 --> <expression>return message.contains("HHH90000014");</expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <!-- 不匹配的日志正常处理 --> <OnMatch>DENY</OnMatch> <!-- 匹配到的日志直接拒绝输出 --> </filter> </logger>
注意:Logback的表达式求值依赖Janino库,如果你的项目里还没引入,Maven可以添加以下依赖:
<dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>3.1.9</version> <!-- 建议使用最新稳定版本 --> </dependency>
Log4j2 配置方式
Log4j2提供了RegexFilter可以快速匹配特定内容,在log4j2.xml中配置如下:
<Logger name="org.hibernate.orm.deprecation" level="WARN"> <Filters> <!-- 匹配包含HHH90000014的日志,匹配到则拦截 --> <RegexFilter regex=".*HHH90000014.*" onMatch="DENY" onMismatch="NEUTRAL"/> </Filters> </Logger>
如果你需要更精准的匹配逻辑,也可以使用ScriptFilter编写自定义脚本判断,但大多数情况下RegexFilter就足够满足需求了。
其他日志框架的通用思路
如果你用的是其他日志框架,核心逻辑都是一致的:找到目标日志器(org.hibernate.orm.deprecation),添加一个内容过滤器,仅拦截包含HHH90000014的日志条目,其余日志正常输出。
内容的提问来源于stack exchange,提问作者Krzysztof Krasoń
相关产品推荐
相关产品推荐

