사용자 도구

사이트 도구


java:hibernate:log

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:hibernate:log [2021/02/16 18:21]
kwon37xi [Hibernate Log 남기기]
java:hibernate:log [2023/12/24 11:38]
kwon37xi
줄 8: 줄 8:
   * statistics를 남기기 위해 ''hibernate.generate_statistics=true'' 로 지정하고 ''org.hibernate.stat'' Logger를 ''DEBUG''로 지정한다.   * statistics를 남기기 위해 ''hibernate.generate_statistics=true'' 로 지정하고 ''org.hibernate.stat'' Logger를 ''DEBUG''로 지정한다.
  
-Hibernate 의 로깅을 사용하지 않고 [[database:mysql:jdbc|MySQL JDBC]] 처럼, JDBC 드라이버 자체의 로깅을 사용하는 방법도 있다.+Hibernate 의 로깅을 사용하지 않고 다음과 같은 방법들을 사용할 수도 있다. 
 + 
 +  * [[java:jdbc|JDBC]] 
 +  * [[database:mysql:jdbc|MySQL JDBC]] 처럼, JDBC 드라이버 자체의 로깅 
 +  * [[https://log4jdbc.brunorozendo.com|log4jdbc]] 
 +  * [[java:jdbc:datasource_proxy|DataSource Proxy]] 
 + 
 +JDBC 드라이버 자체 로깅을 사용하면 프레임워크등에 의해 실행되는 너무 세세한 로그가 남는 반면, 파라미터까지 정확하게 정확한 호출 순서에 따라 로그를 볼 수 이는 장점이 있다. 
 +===== Log Categories ===== 
 +  * ''org.hibernate'' : 모든 메시지 
 +  * ''org.hibernate.SQL = DEBUG'' : SQL 구문 
 +  * ''org.hibernate.type.descriptor.sql = TRACE'' : 바인딩된 파라미터 값(Hibernate 4,5) 
 +    * ''org.hibernate.type = TRACE'' 은 모든 JDBC 파라미터를 찍으며, 이 경우 로그가 과도하게 찍히기 때문에 
 +    * ''org.hibernate.type.BasicTypeRegistry = WARN'' 으로 로그 출력을 줄여줄수도 있다. 
 +  * ''org.hibernate.orm.jdbc.bind = TRACE'' : 바인딩된 파라미터 값(Hibernate 6) 
 +  * ''org.hibernate.SQL_SLOW = INFO'' : Hibernate 5.4.5 이상 버전에서 Slow Query 
 +    * ''hibernate.session.events.log.LOG_QUERIES_SLOWER_THAN_MS=밀리초'' property 를 지정해주면 이 값을 따름. 
 +  * ''org.hibernate.pretty'' : flush 시점의 세션이 있는 Entity 들의 상태(최대 20 개만) 
 +  * ''org.hibernate.cache'' : 2차 캐시 상태 
 +  * ''org.hibernate.stat = DEBUG'' : 모든 쿼리의 분석 통계 
 +  * ''org.hibernate.tool.hbm2ddl = DEBUG'' : DDL 로그 
 +  * ''org.hibernate.transaction'' : 트랜잭션 정보 
 +  * ''org.hibernate.jdbc'' : JDBC 리소스 처리 상태 로깅 
 +  * ''org.hibernate.hql.ast.AST'' : Log HQL and SQL ASTs during query parsing 
 +  * ''org.hibernate.secure'' : Log all JAAS authorization requests 
 ===== logback ===== ===== logback =====
-  * ''logback.groovy''<code groovy> +<code xml>
-logger('org.hibernate.SQL', DEBUG) // SQL 로그 +
-logger('org.hibernate.tool.hbm2ddl', DEBUG) // DDL 로그 +
-logger('org.hibernate.type', TRACE) // 파라미터와 결과 로그 +
-logger('org.hibernate.stat', DEBUG) // statistics +
-logger('org.hibernate.type.BasicTypeRegistry', WARN) // 과도한 로그 제외 +
-</code> +
-  * ''logback.xml''<code xml>+
 <?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
 <configuration> <configuration>
줄 23: 줄 41:
     <logger name="org.hibernate.SQL" level="DEBUG" />     <logger name="org.hibernate.SQL" level="DEBUG" />
     <logger name="org.hibernate.tool.hbm2ddl" level="DEBUG"/>     <logger name="org.hibernate.tool.hbm2ddl" level="DEBUG"/>
-    <logger name="org.hibernate.type" level="TRACE" />+    <logger name="org.hibernate.type.descriptor.sql" level="TRACE" /> <!-- Hibernate 4,5 --> 
 +    <logger name="org.hibernate.orm.jdbc.bind" level="TRACE" /> <!-- Hibernate 6 -->
     <logger name="org.hibernate.stat" level="DEBUG" />     <logger name="org.hibernate.stat" level="DEBUG" />
-    <logger name="org.hibernate.type.BasicTypeRegistry" level="WARN" />+    <logger name="org.hibernate.SQL_SLOW" level="INFO" />
 </configuration> </configuration>
 </code> </code>
줄 66: 줄 85:
 디버깅시 가장 중요한 SQL로그와 파라미터/결과 로그는 **log4j.logger.org.hibernate.SQL=debug**와 **log4j.logger.org.hibernate.type=TRACE** 이다. 디버깅시 가장 중요한 SQL로그와 파라미터/결과 로그는 **log4j.logger.org.hibernate.SQL=debug**와 **log4j.logger.org.hibernate.type=TRACE** 이다.
  
-===== Hibernate Log Categories ===== 
-  * ''org.hibernate.SQL'' Log all SQL DML statements as they are executed 
-  * ''org.hibernate.type'' Log all JDBC parameters 
-  * ''org.hibernate.type.BasicTypeRegistry''는 너무 많은 로그를 찍으므로 WARN 정도로 레벨을 올릴 것. 
-  * ''org.hibernate.tool.hbm2ddl'' Log all SQL DDL statements as they are executed 
-  * ''org.hibernate.pretty'' Log the state of all entities (max 20 entities) associated with the session at flush time 
-  * ''org.hibernate.cache'' Log all second-level cache activity 
-  * ''org.hibernate.transaction'' Log transaction related activity 
-  * ''org.hibernate.jdbc'' Log all JDBC resource acquisition 
-  * ''org.hibernate.hql.ast.AST'' Log HQL and SQL ASTs during query parsing 
-  * ''org.hibernate.secure'' Log all JAAS authorization requests 
-  * ''org.hibernate'' Log everything. This is a lot of information but it is useful for troubleshooting  
  
 ===== SQL Formatter ===== ===== SQL Formatter =====
줄 85: 줄 92:
   * [[https://stackoverflow.com/questions/1710476/how-to-print-a-query-string-with-parameter-values-when-using-hibernate|java - How to print a query string with parameter values when using Hibernate - Stack Overflow]]   * [[https://stackoverflow.com/questions/1710476/how-to-print-a-query-string-with-parameter-values-when-using-hibernate|java - How to print a query string with parameter values when using Hibernate - Stack Overflow]]
   * [[https://thorben-janssen.com/hibernate-tips-how-to-log-sql-statements-and-their-parameters/|Hibernate Tips: How to log SQL statements and their param]]   * [[https://thorben-janssen.com/hibernate-tips-how-to-log-sql-statements-and-their-parameters/|Hibernate Tips: How to log SQL statements and their param]]
 +  * [[https://thorben-janssen.com/hibernate-slow-query-log/|Hibernate Slow Query Log - The easiest way to find slow queries]] 
 +  * [[https://thorben-janssen.com/hibernate-logging-guide/|Logging Guide for Hibernate 4, 5 & 6 - Use the right config for dev and prod]] 
 +  * [[https://vladmihalcea.com/log-sql-spring-boot/|The best way to log SQL statements with Spring Boot - Vlad Mihalcea]]
java/hibernate/log.txt · 마지막으로 수정됨: 2023/12/24 11:38 저자 kwon37xi