如何配置 Hibernate 以使用标准日志记录

How do I configure Hibernate to use standard logging

如何配置 Hibernate 以使用标准日志记录?

我读过的文章说要将日志记录框架放在类路径中,但我只想使用 java 附带的标准,这样编程就没有意义了。

我正在尝试记录 SQL 所以在我的代码中(在我使用 Hibernate 之前)我有

Logger hibernateLogger = Logger.getLogger("org.hibernate.SQL");
hibernateLogger.setLevel(Level.ALL);

并附上我用于其他调试的控制台处理程序

            ConsoleHandler ch = new ConsoleHandler();
            ch.setFormatter(new com.jthink.songkong.logging.LogFormatter());
            ch.setLevel(Level.FINEST);
            MainWindow.logger.addHandler(ch);
            hibernateLogger.addHandler(ch);

但它没有任何效果,没有 Hibernate 日志记录写入控制台。

所以我假设问题是默认为 log4 或其他东西,但我不知道如何更改此行为。我将 Hibernate 作为我的应用程序的一部分包含在 Maven (pom.xml) 中,如果可能的话,我想以编程方式 select 标准日志记录。

记录器受 约束。您的代码中的一个错误如下: Logger hibernateLogger = Logger.getLogger("org.hibernate.SQL");

删除该行并创建一个常量:

private static final Logger hibernateLogger = Logger.getLogger("org.hibernate.SQL");

只有在 .

的情况下,在配置文件中定义它才有效

我在 https://docs.jboss.org/hibernate/orm/4.3/topical/html/logging/Logging.html

找到了解决方案

我正在使用 Hibernate 4.3.11,问题是 Hibernate 会根据 class 路径上加载的内容自动选择日志记录框架,并且仅将标准日志记录用作最后的手段。

我在我的构建中使用 Maven 并且没有明确包含任何其他日志记录框架,但这并不是说我使用的第 3 方库之一不包含它,这使得 jboss 框架存在根本性缺陷。

添加以下系统属性

-Dorg.jboss.logging.provider=jdk

解决问题。

我个人认为所有这些第 3 方日志记录框架没有什么价值,如果标准日志记录存在缺陷,那么应该通过修复标准日志记录来解决这些缺陷,但它对我来说一直很有效。

此外,由于日志记录对性能至关重要,Java 工程师似乎在标准日志记录方面比第 3 方日志记录具有优势,他们可以根据对 VM 的更好了解以及它是标准 class.