Java 休眠记录器不替换%s
我注意到,hibernate并没有取代日志消息中的Java 休眠记录器不替换%s,java,spring,spring-boot,hibernate,logback,Java,Spring,Spring Boot,Hibernate,Logback,我注意到,hibernate并没有取代日志消息中的%s模板。我们自己的日志信息被很好地替换了。我的项目使用SpringBoot(包括slf4j+logback) 服务器启动时的休眠信息如下所示: 其他LIB也受到影响: 依赖关系图,按要求: 要将hibernate配置为使用slf4j,它需要以下属性,它需要使用 或者在主Spring引导应用程序类中 static { System.setProperty("org.jboss.logging.provid
%s
模板。我们自己的日志信息被很好地替换了。我的项目使用SpringBoot(包括slf4j+logback)
服务器启动时的休眠信息如下所示:
其他LIB也受到影响:
依赖关系图,按要求:- 要将hibernate配置为使用
,它需要以下属性,它需要使用slf4j
static {
System.setProperty("org.jboss.logging.provider", "slf4j");
}
找出发生了什么的步骤
这实际上不是一个答案,但有一些故障排除步骤,因为上面的类之一是JtaPlatformInitiator
,因为我无法复制它
- 将断点放在类
的下一行:JtaPlatformInitiator.org.hibernate.engine.transaction.jta.platform.internal
- 当应用程序启动时,它将到达上面的行
- 然后它将到达这个jboss类,您可以看到
以及未格式化字符串
。参数
- 现在,一旦进入这个方法,它应该选择其中一个,并准备一个
格式化字符串。对我来说,它转到了
,并且正确连接org.jboss.logging.Log4j2Logger
- 您能检查一下在最后一步中为您选择的课程吗
mvn帮助:有效的pom
添加与日志相关的依赖项吗?我已经添加了依赖项。我有相同的类可供选择,但对我来说,它转到了“JBossLogManagerLogger”.您是否尝试深入该类,因为它仍然没有连接,而是进一步委托,以便您可以看到字符串和参数的连接发生在何处?我将其追溯到org.slf4j.bridge.SLF4JBridgeHandler#getMessageI18N
方法,它完全忽略设置的LogRecord
s属性formatStyle=PRINTF
。(Params在那里,所以它应该可以做模板。)谢谢!我的直觉是,它与jboss记录器有关。这个问题似乎只存在于jboss相关的DEP中:hibernate、netty、undertow。我可能已经深入了解了这一点。您可以尝试使用以下选项逐一启动应用程序吗?1) -Dorg.jboss.logging.provider=log4j2
2)-Dorg.jboss.logging.provider=slf4j
如果它们中的任何一个有效,那么实际上如何排除JBossLogManagerProvider
static {
System.setProperty("org.jboss.logging.provider", "slf4j");
}
LOG.usingJtaPlatform( platform != null ? platform.getClass().getName() : "null" );