문서의 이전 판입니다!
Hibernate는 Log4j 옵션 설정을 통해 SQL 실행 로그 등을 세세히 남기도록 조정할 수 있다.
hibernate.show_sql=true
로 설정하면 로거용 로그와 hibernate가 System.out 으로 찍는 로그 두개씩 찍힌다. 따라서 로거를 사용할 때는 hibernate.show_sql=false 로 설정해야 한다.hibernate.format_sql=true
로 하면 Log4j 로그를 찍을때 알아보기 편한 상태로 줄바꿈 해서 출력해준다.hibernate.generate_statistics=true
로 지정하고 org.hibernate.stat
Logger를 DEBUG
로 지정한다.logback.groovy
logger('org.hibernate.SQL', DEBUG) // SQL 로그 logger('org.hibernate.type', TRACE) // 파라미터와 결과 로그 logger('org.hibernate.type.BasicTypeRegistry', WARN) // 과도한 로그 제외
logback.xml
<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- .... --> <logger name="org.hibernate.SQL" level="DEBUG" /> <logger name="org.hibernate.type" level="TRACE" /> <logger name="org.hibernate.type.BasicTypeRegistry" level="WARN" /> </configuration>
log4j.logger.org.hibernate=info #log4j.logger.org.hibernate=debug # http://blog.naver.com/jdkim528/140027638234 에서 가져옴. -> 쿼리 파라미터는 잘못돼 있음 ### log HQL query parser activity #log4j.logger.org.hibernate.hql.ast.AST=debug ### log just the SQL log4j.logger.org.hibernate.SQL=debug ### log JDBC bind parameters ### log4j.logger.org.hibernate.type=TRACE # 혹은 과거버전 log4j에서는 DEBUG ### log schema export/update ### log4j.logger.org.hibernate.tool.hbm2ddl=info ### log HQL parse trees #log4j.logger.org.hibernate.hql=debug ### log cache activity ### log4j.logger.org.hibernate.cache=info ### log transaction activity #log4j.logger.org.hibernate.transaction=debug ### log JDBC resource acquisition #log4j.logger.org.hibernate.jdbc=debug ### enable the following line if you want to track down connection ### ### leakages when using DriverManagerConnectionProvider ### #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
디버깅시 가장 중요한 SQL로그와 파라미터/결과 로그는 log4j.logger.org.hibernate.SQL=debug와 log4j.logger.org.hibernate.type=TRACE 이다.
org.hibernate.SQL
Log all SQL DML statements as they are executedorg.hibernate.type
Log all JDBC parametersorg.hibernate.type.BasicTypeRegistry
는 너무 많은 로그를 찍으므로 WARN 정도로 레벨을 올릴 것.org.hibernate.tool.hbm2ddl
Log all SQL DDL statements as they are executedorg.hibernate.pretty
Log the state of all entities (max 20 entities) associated with the session at flush timeorg.hibernate.cache
Log all second-level cache activityorg.hibernate.transaction
Log transaction related activityorg.hibernate.jdbc
Log all JDBC resource acquisitionorg.hibernate.hql.ast.AST
Log HQL and SQL ASTs during query parsingorg.hibernate.secure
Log all JAAS authorization requestsorg.hibernate
Log everything. This is a lot of information but it is useful for troubleshooting