2009-09-04 9 views
8

hibernate.cfg.xml 파일에 몇 가지 속성을 설정 했음에도 불구하고 Hibernate에서 콘솔 출력을 더 이상 얻을 수 없었습니다 (디버깅을 돕기 위해). 예를 들어, <property name="show_sql">true</property> 행을 추가해도 사실 SQL 문이 콘솔에 표시되지 않았습니다.Hibernate에서 더 많은 디버그 메시지를 얻으려면 어떻게해야합니까?

log4j.logger.org.hibernate=debug과 같은 log4j.properties 파일의 콘텐츠를 가지고 놀아 보았습니다. 내가 뭘 놓치고 있니?


편집 : 최대 절전 모드-service.xml 파일의 내용

<server> 
    <mbean code="org.jboss.hibernate.jmx.Hibernate" 
     name="jboss.har:service=Hibernate_SMS"> 
     <attribute name="DatasourceName">java:/SMS_DS</attribute> 
     <attribute name="Dialect">org.hibernate.dialect.HSQLDialect</attribute> 
     <attribute name="SessionFactoryName">java:/hibernate/SessionFactory</attribute> 
     <attribute name="CacheProviderClass">org.hibernate.cache.HashtableCacheProvider</attribute> 
     <attribute name="ShowSqlEnabled">true</attribute> 
    </mbean> 
</server> 

있습니다 I 해요이 실제로 불구하고, 어떤 효과가있는 경우 100 % 확실하지 않다. 이 XML 파일은 내 데이터베이스 작업을 처리하는 Eclipse 프로젝트에 있지만 JBoss 배포 디렉토리에는없는 것 같습니다.


편집 2 :이는 확실히 HAR로 배포됩니다. 즉, 나는 꽤 필요하다고 확신한다. hibernate.cfg.xml - 맵핑 문서가 해당 파일의 항목으로 생략되었을 때 문제가 발생했다. 나는 HAR이 개미를 사용하여 생성 생각 - 대상이 build.xml 파일에 대한 거기 :

<target name="har" depends="prepare" description="Builds the Hibernate HAR file"> 
    <mkdir dir="${class.root}" /> 
    <mkdir dir="${distribution.dir}" /> 

    <jar destfile="${distribution.dir}/${har.name}">      
     <!-- include the hbm.xml files --> 
     <fileset dir="${class.root}"> 
      <include name="**/*.hbm.xml"/> 
      <include name="com/[redacted]/sms/data/dto/*.class"/> 
      <include name="com/[redacted]/sms/data/dto/base/*.class"/> 
     </fileset> 

     <!-- include jboss-service.xml --> 
     <metainf dir="${hibernate.dir}"> 
      <include name="hibernate-service.xml"/> 
     </metainf> 
    </jar> 
</target> 

을하지만 최대 절전 모드-service.xml 파일에서 잘못 구성된 XML과 Ant 빌드를 수행 할 때, 그것을 실패하지 않습니다. 업데이트 파일을 완전히 삭제해도 빌드가 실패하지 않습니다. 어떤 아이디어가 있습니까? 최종 업데이트는 (모든 것이 올바르게 설정되어있는 경우)를 완전히 처리해야 출력 SQL 문에 최대 절전 모드지고 같은 소리

- 그 log4j.properties의 설정이 여기에 변화를하지 않을 것이라는 뜻인가? - 실제로는 일 때 ant를 실행할 때 출력을 변경하기 때문입니다.

편집 3 : 내 데이터 har와 다른 이상한 문제로 실행 한 후, 나는 완전히 HAR 파일을 삭제하고 har 개미 빌드 타겟을 사용하여 재건. 갑자기 모든 것이 작동합니다! 그의 굉장한 유용성에 대한 체스 판에 감사드립니다. 결국 내가 무엇을했는지 정확히 알 수 없다고 말할 수는 없지만, 나는 내 자신의 대답을 쓰고 받아들이 기보다는 그의 노력을 인정할 것입니다. 네가 "그 사람"이 아니라면 사과하지.

+0

'hibernate.show_sql'을; 활성화 된 경우 항상 SQL을 콘솔에 인쇄합니다. 적절한 로거 설정에서'org.hibernate.SQL = DEBUG'를 설정하는 것은 로거에 대해 설정된 모든 출력에 동일하게 적용됩니다. 두 방법 모두 서로 독립적입니다 (예 : 두 가지를 모두 설정하면 sql이 두 번 인쇄됩니다) – ChssPly76

답변

10

올바른 속성 이름은 hibernate.show_sql이며 올바르게 작동합니다.

hibernate.cfg.xml이 올바른지 확인하십시오. log4j.properties 파일도 마찬가지입니다. 나는 그것들이 바보 같은 제안처럼 보이지만 "누락 된 로깅 결과"문제의 98 %를 차지한다.

업데이트 : 의견을 계속 추가하지 않고 답변을 업데이트하겠습니다. hibernate-service.xml이 JBoss에 의해 선택되었는지 확인해야합니다. 가장 쉬운 방법은 구문 오류를 추가하는 것입니다 (일부 요소에서 닫는 중괄호를 생략하는 것과 같이). JBoss가 재시동 중에 폭발하는지 확인하십시오 :-)이 파일은 har에 패키징되어야하며 빌드 프로세스의 일부로 배포되어야합니다. JBox가 이 아니고이 아닌 것을 알게되면 그 곳을 보게됩니다.hibernate.cfg.xml에서 충돌하는 설정을 제거합니다 (예 : mbean 속성으로 지정하는 모든 항목을 hibernate.cfg.xml에 복제하지 않아야 함). 그렇다면 hibernate.cfg.xml이 필요합니까? HAR으로 배포 한 경우 매핑이 자동으로 검색되거나 선택되어야합니다.

+0

log4j.properties에서도 로그 수준을 설정해야합니까? - 처음에는 두 파일의 잘못된 복사본을 사용하고 있었지만 여기에서 요청하기 전에 올바른 복사본으로 툴링으로 전환했습니다. –

+0

hibernate.show_sql을 true로 설정하면 SQL이 로깅 구성의 콘솔 _irregardless_에 인쇄됩니다. 또는'org.hibernate.SQL' 로그 레벨을 DEBUG로 설정하여 로깅 설정에서 설정 한대로 원하는 로그 파일로 보낼 수 있습니다. – ChssPly76

+0

' true'하지만 여전히 아무것도 아닙니다. : \ –

6

나는 log4j.properties 파일을 사용하여 최대 절전 모드 문을 로깅한다. SQL 문의 경우 log4j.logger.org.hibernate.SQL 속성은 디버그으로 설정하고 SQL 매개 변수/반환 값은 log4j.logger.org.hibernate.type 속성을 설정해야합니다. 추적.

### direct log messages to stdout 
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{ABSOLUTE} %5p %c{1}:%L - %m%n 

### Root logger 
log4j.rootLogger=debug, stdout 

### Main Hibernate 
log4j.logger.org.hibernate=debug 

### log just the SQL 
log4j.logger.org.hibernate.SQL=debug 

### log JDBC bind parameters 
log4j.logger.org.hibernate.type=trace 
+0

이유가 무엇이든, 제 JBoss가 실제로 실행 중일 때 제 'log4j.properties' 파일이 콘솔 출력에 영향을 미치지 않는 것 같습니다. 그러나 내 개미 스크립트를 실행할 때 출력 수준을 제어하는 ​​것 같습니다. –

1

이 또한 올바른 log4j를 구성을 사용하는 슈어합니다 여기

은 내가 사용하는 log4j.properties 파일입니다.

jboss에서 실행 중일 때는 log4j 로깅을 $JBOSS_HOME/server/<config>/conf/jboss-log4j.xml으로 구성하십시오.

두 개의 기본 애펜더가 있습니다. FILElog/server.logCONSOLE에서 stdout (가끔 log/console.log으로 리디렉션 됨)에 기록됩니다. appender의 임계 값을 파일에서 DEBUG으로 조정하거나 systemproperty jboss.server.log.threshold (사용중인 jboss 버전에 따라 다름)을 설정하여 조정하십시오.

또한 카테고리 추가하여 최대 절전 모드의 로깅 우선 순위를 조정해야합니다 : 로깅 구성 무관 (ShowSqlEnabled` 제이보스 MBean 내의`, 또는)

<category name="org.hibernate"> 
    <priority value="DEBUG"/> 
</category> 
관련 문제