在休眠状态中包含 log4j 属性文件,以显示带有值而不是问号的查询

2022-09-03 01:50:32

我有crearte log4j.properties文件,如下所示:

log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug

log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE

有人可以帮助我如何将它包含在文件中吗?我很抱歉,我实际上不知道log4j是如何工作的。我创建这个来显示我的休眠查询,而不是,但它仍然显示任何变化,所以我需要进一步继续吗?hibernate.cfg.xmlvalue??

我从这里参考了Hibernate show real SQL


答案 1

休眠中的“show_sql”属性.cfg.xml会导致查询直接打印到控制台。

Log4j允许从控制台到文件,网络端口到数据库的任何位置记录输出。但是您拥有的简单配置也应该在控制台上打印。因此,首先删除show_sql属性,以查看Log4j是否在控制台上放置了任何内容。

如果这不起作用,则表明Log4j配置不正确。如果您使用的是休眠> 3.5,它将使用 slf4j api,默认情况下使用 logback 而不是 log4j。您可以通过从类路径中删除 logback jar 并添加 slf4j-log4j12.jar 和 log4j.jar来轻松切换到 log4j。

Log4j 跟踪还使用“?”打印查询,但它也打印参数绑定,即数据库驱动程序或服务器将用什么“?”替换。


答案 2

请根据您的版本参考休眠参考。这是3.3链接

编辑 :-

  1. 为了设置日志记录,您需要在类路径中输入 slf4j-api.jar以及用于首选绑定的 jar 文件 - slf4j-log4j12.jar在 Log4J 的情况下。
  2. 将 log4j.properties 文件放在类路径中。一个示例属性文件与休眠一起分布在 src/ 目录中。
  3. 启用以下日志 4j 类别。

    org.hibernate.SQL   Log all SQL DML statements as they are executed
    
    org.hibernate.type  Log all JDBC parameters
    

推荐