【问题标题】:Hibernate query logging : need current timestamp休眠查询日志记录:需要当前时间戳
【发布时间】:2015-04-17 20:59:08
【问题描述】:

在休眠配置中我提到了 show_sql=true。

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

如下图

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

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

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

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

【问题讨论】:

  • this 对你有帮助吗

标签: java hibernate


【解决方案1】:

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

– 在配置文件中启用统计

• hibernate.generate_statistics=true

休眠接口

– 全局信息统计

– EntityStatistics 获取有关对象类型的信息

– SQL 和 HQL 查询的 QueryStatistics

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

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

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

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

休眠日志类别

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. 例如,通过启用统计信息,您可以获得特定实体类猫统计信息的总数。 (插入、更新或删除调用了多少次)如下:

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"; 查询查询 = getSession().createQuery(hql); query.setParameter("日期", 日期);

` 有关详细信息,请查看 Hibernate 文档。

【讨论】:

    【解决方案2】:

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

    我已经使用过以下日志框架,所以我可以告诉你,这些框架与 Hibernate 配合得很好:log4jslf4jlogback em>,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
    

    【讨论】:

    • 谢谢。我用过 log4j.category.org.hibernate.SQL=DEBUG
    猜你喜欢
    • 2017-08-23
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多