【问题标题】:can't log Hibernate queries log4j无法记录休眠查询 log4j
【发布时间】:2017-07-12 18:04:42
【问题描述】:

我正在尝试将休眠查询记录到特定于 webapp 的日志文件中。 我可以记录任何消息,但我仍然无法记录休眠查询。
它们被记录在 server.log 中,即使在不同的文件中,但我需要为在同一服务器上运行的每个应用程序创建一个特定于应用程序的日志。
我正在使用log4j 1.2,我能够创建日志文件,记录传递给控制台但休眠查询的所有信息。
database.properties 文件中,我找到了负责控制台中的日志输出的hibernate.show_sql=true。 这是我指的控制台的日志输出类型:

16:10:35,827 INFO [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: select [...](这里输出正确的查询通过,准备好的?声明)

无论如何,我需要的是记录该输出。 我尝试了不同的log4j.xml 设置,但仍然没有成功,它会创建日志文件但不会记录这些输出。 这是当前设置,即在同一个文件中记录所有内容,当我能够记录这些信息时,我将继续分离日志。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="mainFileAppender2" class="org.apache.log4j.RollingFileAppender">
   <param name="append" value="false" />
   <param name="maxFileSize" value="100MB" />
   <param name="maxBackupIndex" value="50" />
    <param name="File" value="${webapp.root}/WEB-INF/logs/mainCORE.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p %c{1}:%L %m %n" />
    </layout>
</appender>

<appender name="journaldev-hibernate2" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${webapp.root}/WEB-INF/logs/hib-queriesCORE.log" />
    <param name="Append" value="false"/><!--value="true" /-->
    <param name="ImmediateFlush" value="true" />
    <param name="MaxFileSize" value="200MB" />
    <param name="MaxBackupIndex" value="50" />

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" />
    </layout>
</appender>
<root>
    <priority value="debug"></priority>
<!--    <appender-ref ref="stdout"/>  -->
    <appender-ref ref="mainFileAppender2"/>
</root>

此配置记录除这些输出之外的所有内容。在server.log 中记录如下:

16:10:35,827 INFO [stdout] (http-localhost-127.0.0.1-8080-1) 休眠:选择 [...](查询的其余部分)

【问题讨论】:

    标签: java hibernate logging log4j


    【解决方案1】:

    为以下类别配置记录器:

    log4j.logger.org.hibernate.SQL=DEBUG
    log4j.logger.org.hibernate.type=TRACE
    

    第一个将记录 SQL 语句(使用 ? 表示参数值),第二个将在需要时打印这些参数值。

    所以在你的情况下,这样的事情应该可以解决问题:

    <category name="org.hibernate.SQL">
        <appender-ref ref="journaldev-hibernate2"/>
       <priority value="DEBUG"/>
    </category>
    
    <category name="org.hibernate.type">
       <appender-ref ref="journaldev-hibernate2"/>
       <priority value="TRACE"/>
    </category>
    

    【讨论】:

      【解决方案2】:

      这样解决了;无论如何,它还会提取从查询中提取的值

      log = ${jboss.server.log.dir}/log/
      
      #Loggers
      log4j.rootLogger = INFO, FILE
      log4j.logger.org.hibernate.SQL = DEBUG, HIBERNATE
      log4j.logger.org.hibernate.type = TRACE, HIBERNATE
      
      #Appenders
      # Main appender
      log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
      log4j.appender.FILE.File=${log}/main.log
      log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
      log4j.appender.FILE.layout.ConversionPattern=%d %-5p %c{1}:%L %m %n
      log4j.appender.FILE.ImmediateFlush=true
      log4j.appender.FILE.Threshold=debug
      log4j.appender.FILE.Append=true
      log4j.appender.FILE.DatePattern=dd-MM-yyyy
      # Hibernate queries appender
      log4j.appender.HIBERNATE=org.apache.log4j.DailyRollingFileAppender
      log4j.appender.HIBERNATE.File=${log}/hib-queries.log
      log4j.appender.HIBERNATE.layout=org.apache.log4j.PatternLayout
      log4j.appender.HIBERNATE.layout.ConversionPattern=%d %d{Z} [%t] %-5p     (%F:%L) - %m%n
      log4j.appender.HIBERNATE.ImmediateFlush=true
      log4j.appender.HIBERNATE.Threshold=debug
      log4j.appender.HIBERNATE.Append=true
      log4j.appender.HIBERNATE.DatePattern=dd-MM-yyyy
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        相关资源
        最近更新 更多