避免在日志文件中打印默认的Hibernate异常日志报告



我写了一个Java程序,其中使用了 Hibernate 。在Linux中运行该Java程序时,我将Hibernate Log打印到日志文件中,该文件由于内置异常报告(例如约束表情异常),在开始会话工厂等时占据了巨大的内存。但是我不希望冬眠内置日志语句以避免记忆占用率打印。我该怎么办?

我不想在logfile中打印的异常日志报告:

org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    at com.tcs.rapdrp.main.MyThread.run(InsertionData.java:238)
Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (tablename.columnname) violated
    at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10070)
    at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:213)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242) ... 8 more

在我看来,这正是日志文件的意义 - 捕获异常和相关的堆栈跟踪,以便您可以查明出了问题。日志保存在纯文本文件中,我认为在正常情况下不会引起内存问题。

使用诸如log4j之类的Logger工具并更改日志级别,您将能够禁用日志。检查您的应用程序是否将日志级别设置为DEBUG。您可以适当地将其更改为ERRORWARNING

最新更新