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
我认为您需要记录时间戳而不是统计信息,但您可以根据需要使用以下任何选项。
您可以使用 log4jdbc JDBC 代理驱动程序来记录 SQL 和其他有趣的信息。
您可以在 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>
- 启用统计信息,例如,您可以获得特定实体的总计数 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" );
- `字符串 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 一起工作得很好:log4j、slf4j, 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
在休眠配置中我已经提到 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
我认为您需要记录时间戳而不是统计信息,但您可以根据需要使用以下任何选项。
您可以使用 log4jdbc JDBC 代理驱动程序来记录 SQL 和其他有趣的信息。
您可以在 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>
- 启用统计信息,例如,您可以获得特定实体的总计数 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" );
- `字符串 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 一起工作得很好:log4j、slf4j, 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