【问题标题】:How can I force java Hibernate to throw exceptions instead of logging logj4 messages?如何强制 java Hibernate 抛出异常而不是记录 logj4 消息?
【发布时间】:2011-11-03 01:17:49
【问题描述】:

令人讨厌的是,Hibernate 在某些情况下似乎喜欢将日志写入 log4j 本身。我不希望它。我希望它在出现问题时抛出异常,就像一个好的库那样。

有谁知道这是否可行,更重要的是,我该怎么做?

例如,我收到此错误级别日志“尝试获取锁定时发现死锁;尝试重新启动事务”。如果它至少包含一个堆栈跟踪,或者可能导致该死锁的查询,它就不会那么糟糕了。但事实并非如此,因此很难调试其中一些案例。

我查看了休眠映射 dtd 文件、休眠配置 xml 文件和休眠配置 dtd 文件,但没有什么可以作为控制日志记录的方法。

我在 log4j.properties 文件中看到以下几行:

# Don't log Hibernate flushing exceptions (usually StaleStateExceptions)
log4j.logger.org.hibernate.event.def.AbstractFlushingEventListener=FATAL
log4j.logger.org.hibernate.jdbc.AbstractBatcher=FATAL

如果我将某些东西标记为“致命”,休眠会抛出异常吗?

我有点迷失在 Hibernate 沼泽中,所以我很感激一些方向。作为上下文,我已经使用 hibernate 2 年了,但我绝不是这方面的专家。

【问题讨论】:

  • 我认为 hibernate 正在抛出异常,这可能会被您的应用程序吞噬。您能否在导致检查此日志消息的休眠调用周围放置一个 try catch。
  • 我们对系统中的几乎所有内容都进行了尝试,包括导致这些日志的调用。我确实知道异常是如何工作的。

标签: java hibernate exception log4j


【解决方案1】:

我们发现,hibernate 实际上会抛出异常,但它会记录日志。我们设置了我们的 log4j,这样 hibernate 就不会像我在我的问题中写的那样记录来自特定类的异常:

# Don't log Hibernate flushing exceptions (usually StaleStateExceptions)
log4j.logger.org.hibernate.event.def.AbstractFlushingEventListener=FATAL

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多