Hibernate SQL 파라미터 값 확인
JavaFX또는 Java에서 Hibernate를 사용하여 DB에 값을 INSERT, UPDATE 할 때 파라미터를 넘기게 되는데
hibernate.cfg.xml에서 설정을 해서 Console에 SQL로그를 남길 수 있다.
insert, update, select 쿼리는 Console에 찍히는데 파라미터 값은 나오지 않는다.
insert User(id, name, phone)
values(?, ?, ?)
Hibernate를 잘 사용하려면 Console에 찍히는 쿼리를 계속 봐줘야 한다고 한다. 그래야 쿼리 튜닝도 가능하고 성능도 향상될 수 있지만,
쿼리 확인을 안 하고 Hibernate만 믿고 그냥 사용하게 되면 오히려 성능저하로 인해 사용을 안 하느니만 못하다고 한다.
log4j 셋팅
log4j의 값을 설정하기 전에 log4j를 우선 프로젝트에 셋팅을 해줘야 하기 때문에 셋팅하는 방법부터 알아보자.
- log4j를 사용하기 위해서 apache-logging-log4j.jar 라이브러리를 다운받는다.
- 프로젝트 폴더 lib 폴더를 만들고 다운받은 log4j.jar 파일을 넣는다.
- 프로젝트 우클릭 > Build Path > Configure Build Path... > Libraries 에서 Add External JARs.. 로 lib 안의 jar파일을 추가한다.
- resource 폴더에 log4j.properties 파일을 생성한다.
- build Path > Source에서 Add Folder.. 로 resources를 체크한다.
properties 파일을 디폴트 패키지에 넣으면 패스설정 없이 사용할 수 있지만,
properties 파일을 별도의 resource 폴더에 넣고 관리하기 위해서 resource 폴더를 디폴트 패키지로 만들었다.
이제 log4j 설정값을 바꿔주는 작업을 해보자.
log4j.properties 생성
log4j 셋팅과 log4j.properties 까지 생성했으니 이제 hibernate의 파라미터 값을 표시해보자.
log4j.logger.org.hibernate.type = trace
이 설정을 하기 위해 log4j.properties 를 생성하게 됐다.
프로젝트를 다시 실행 후 Console을 확인해 보면 기존 파라미터값이 ? 로 표시되지 않고 파라미터 값을 로그로 보여준다.
하지만 내가 원했던 결과는 이게 아니다.
단순히 Hibernate로 update, insert 시 내가 넘기는 파라미터만 나오길 바랬는데, 내가 가져오는 select 되는 데이터 전부 파라미터가 Console에 찍힌다.
log4j.appender.dailyfile.Threshold = DEBUG
log4j.appender.dailyfile = org.apache.log4j.dAILYrOLLINGfILEaPPENDER
log4j.appender.dailyfile.File = ./log/logfile.log
log4j.appender.dailyfile.DatePattern = :'.'yyyy-MM-dd
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.ConvershionPattern = [%d][%-5p](%F:%L)-%m%n
# 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} %5 %c{1}:%L - %m%n
# Root logger option
log4j.rootLogger = INFO, stdout
# Hibernate logging options (INFO only shows startup messages)
log4j.logger.org.hibernate = INFO
# Log JDBC bind parameter runtime arguments
log4j.logger.org.hibernate.type = trace
로그 레벨
DEBUG > INFO > WARN > ERROR > FATAL
DEBUG : 디버그
INFO : 정보
WARN : 경고
ERROR : 에러
FATAL : 심각한 에러
컴포넌트
- Logger(category) : 로그 파일을 작성하는 클래스로서 로깅 메시지를 Appender에 전달하고 로그 레벨을 갖고 있다.
- Appender : 로그 출력 위치를 결정한다.
- Layout : 일자, 시간 클래스명 등의 정보를 어떤 형식으로 출력할 것인지 지정한다.
Layout의 종류
DateLayout/HTMLLayout/PatternLayout/SimpleLayout/XMLLayout
Hibernate Log 카테고리
- org.hibernate.SQL
- org.hibernate.type
- org.hibernate.type.BasicTypeRegistry
- org.hibernate.tool.hbm2ddl
- org.hibernate.pretty
- org.hibernate.cache
- org.hibernate.transaction
- org.hibernate.jdbc
- org.hibernate.hql.ast.AST
- org.hibernate.secure
- org.hibernate
'JavaFX' 카테고리의 다른 글
[JavaFX] Hibernate Exception in thread JavaFX Application Thread xxx is not mapped [ FROM xxx] 에러 (0) | 2020.04.16 |
---|---|
[JavaFX] JavaFX cannot set style once stage has been set visible 에러 (0) | 2020.04.13 |
[JavaFX] JavaFX 하이버네이트 CRUD 데이터 저장 삭제 조회하기 (0) | 2020.04.04 |
[JavaFX] JavaFX 새 팝업창에 Parameter 데이터 전송 (0) | 2020.04.02 |
[JavaFX] JavaFX Popup 새 팝업창 띄우기 (0) | 2020.04.02 |