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

时间:2015-02-17 07:34:36

标签: java hibernate

在hibernate配置中,我提到了show_sql = true。

在日志中,我可以看到查询正在打印,这是由hibernate执行的。

如下所示

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

我想打印当前时间戳以及查询。喜欢

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

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

2 个答案:

答案 0 :(得分:0)

Hibernate维护有关查询对象的统计信息,以及

的频率

- 在配置文件中启用统计信息

• hibernate.generate_statistics=true

Hibernate接口

- 全球信息统计

- 有关对象类型

的信息的EntityStatistics

- SQL和HQL查询的QueryStatistics

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

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

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

  3. 要使用Log4j,您还需要在类路径中放置log4j.properties文件。一个示例属性文件与siber /目录中的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. 启用统计信息后,您可以获得特定实体类cat统计数的总计数。 (插入,更新或删除多少次调用)如下所示:
    2. EntityStatistics entityStats = stats.getEntityStatistics( Cat.class.getName() );

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

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

      1. `String hql =“从POJO作为POJO,其中to_date(to_char(POJO.tradeDate,'DD-MON-YY'),'DD-MON-YY')=:date”; 查询query = getSession()。createQuery(hql); query.setParameter(“date”,date);
      2. ` 请查看Hibernate Documentation以获取更多详细信息。

答案 1 :(得分:0)

show_sql=true选项仅设置写入系统控制台,它不是真正的记录器,因此您无法对其进行配置。如果你想从Hibernate获得有意义的日志记录,你应该配置一个日志框架,并使用它来控制Hibernate的日志记录。

我已经使用了以下日志框架,所以我可以告诉你,这些框架适用于Hibernate: log4j slf4j logback log4j2


使用log4j作为记录器

例如,log4j.properties文件中的这一行配置 log4j 以保留相同的信息,该信息与show_sql=true一起显示:

log4j.category.org.hibernate.SQL=DEBUG

但在这种情况下,可以配置输出。就我而言,格式在console appender:

中定义
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