Hibernate 查询日志记录:需要当前时间戳

Hibernate query logging : need current timestamp

在休眠配置中我已经提到 show_sql=true.

在日志中我可以看到正在打印由休眠执行的查询。

喜欢下面

Hibernate : <insert query> Hibernate : <select query>

我想连同查询一起打印当前时间戳。喜欢

<current time > Hibernate : <insert query> <current time > Hibernate : <select query>

我正在使用 Hibernate 4。 我使用了 hibernate.generate_statistics=true 但这没有时间插入。而且,我只需要当前时间。

Hibernate 维护有关查询哪些对象以及查询频率的统计信息

– 在配置文件中启用统计

• hibernate.generate_statistics=true

Hibernate 接口

– 全局信息统计

– 对象类型信息的 EntityStatistics

– SQL 和 HQL 查询的 QueryStatistics

我认为您需要记录时间戳而不是统计信息,但您可以根据需要使用以下任何选项。

  1. 您可以使用 log4jdbc JDBC 代理驱动程序来记录 SQL 和其他有趣的信息。

  2. 您可以在 class 路径中使用 slf4j-api.jar 以及首选绑定的 jar 文件 - slf4j-log4j12.jar

要使用 Log4j,您还需要在 class 路径中放置一个 log4j.properties 文件。在 src/ 目录中随 Hibernate 分发了一个示例属性文件。

Hibernate 日志类别

org.hibernate.SQL - 在执行时记录所有 SQL DML 语句

org.hibernate.type - 记录所有 JDBC 参数

org.hibernate.tool.hbm2ddl - 在执行时记录所有 SQL DDL 语句

org.hibernate.pretty - 在刷新时记录与会话关联的所有实体(最多 20 个实体)的状态

org.hibernate - 记录一切。这是很多信息,但对故障排除很有用

使用 Hibernate,您几乎应该始终为类别 org.hibernate.SQL 启用调试,或者,属性 hibernate.show_sql 启用

<attribute name="ShowSqlEnabled">true</attribute>
  1. 启用统计信息,例如,您可以获得特定实体的总计数 class cat 统计信息。 (调用了多少次插入、更新或删除)如下所示:

EntityStatistics entityStats = stats.getEntityStatistics( Cat.class.getName() );

long changes = entityStats.getInsertCount() + entityStats.getUpdateCount() + entityStats.getDeleteCount();

log.info(Cat.class.getName() + " changed " + changes + "times" );

  1. `字符串 hql = "from POJO as POJO where to_date(to_char(POJO.tradeDate, 'DD-MON-YY'), 'DD-MON-YY') = :date"; 查询 query = getSession().createQuery(hql); query.setParameter("date", 日期);

` 请查看 Hibernate 文档以获取更多详细信息。

show_sql=true选项只设置写入系统控制台,它不是真正的记录器,所以你不能配置它。如果您想从 Hibernate 获得有意义的日志记录,您应该配置一个日志记录框架,并使用它来控制 Hibernate 的日志记录。

我已经使用了以下日志记录框架,所以我可以告诉你,它们与 Hibernate 一起工作得很好:log4jslf4j, logback, log4j2.


使用 log4j 作为记录器

例如,log4j.properties 文件中的这一行配置 log4j 以保留相同的信息,这些信息用 show_sql=true:

log4j.category.org.hibernate.SQL=DEBUG

但在这种情况下,您可以配置输出。在我的例子中,格式在 console 附加程序中定义:

log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p %F:%L - %m%n

这样,输出为:

<current time> DEBUG SqlStatementLogger.java:104 - <insert query>

一个完整的log4j.properties文件

为了完整起见,我包含了我的配置文件:

# root logger
 log4j.rootLogger = INFO, stdout

# category filters
log4j.category.org.hibernate.SQL=TRACE

# appenders
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p %F:%L - %m%n