[Hibernate] Cấu hình hiển thị hibernate sql parameter - Log4j

Vấn đề
Hibernate có tính năng ghi log cơ bản để hiển thị câu SQL được tạo ra với property show_sql trong file cấu hình

Code:
Hibernate: INSERT INTO mkyong.stock_transaction (CHANGE, CLOSE, DATE, OPEN, STOCK_ID, VOLUME)
VALUES (?, ?, ?, ?, ?, ?)
Tuy nhiên, nó không đủ để fix bug, giá trị của các Hibernate SQL parameter bị thiếu.


Giải pháp – Log4j

Yêu cầu sử dụng Log4J để hiển thị giá trị của Hibernate SQL parameter.


1. Cấu hình Log4j trong Hibernate
Theo dõi bài biết Cấu hình Log4j trong Hibernate


2. Thay đổi Log level
Chỉnh sửa file Log4j properties và đổi log level thành “debug” hoặc “trace” trong property “log4j.logger.org.hibernate.type”.

File : log4j.properties
Code:
# 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 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

3. Hoàn thành
Giá trị các parameter của Hibernate sẽ được hiển thị

Kết quả…
Code:
Hibernate: INSERT INTO mkyong.stock_transaction (CHANGE, CLOSE, DATE, OPEN, STOCK_ID, VOLUME)
VALUES (?, ?, ?, ?, ?, ?)
13:33:07,253 DEBUG FloatType:133 - binding '10.0' to parameter: 1
13:33:07,253 DEBUG FloatType:133 - binding '1.1' to parameter: 2
13:33:07,253 DEBUG DateType:133 - binding '30 December 2009' to parameter: 3
13:33:07,269 DEBUG FloatType:133 - binding '1.2' to parameter: 4
13:33:07,269 DEBUG IntegerType:133 - binding '11' to parameter: 5
13:33:07,269 DEBUG LongType:133 - binding '1000000' to parameter: 6

Ghi chú
Nếu việc ghi log như trên vẫn không đủ chi tiết để fix bug liên quan đến SQL, có thể sử dụng P6Spy để ghi lại câu SQL chính xác mà app gửi đến database. Xem bài viết Cách hiển thị giá trị các hibernate sql parameter – P6Spy


Cám ơn các bạn đã theo dõi. Hẹn gặp lại các bạn trong các bài viết sau :D

Bài viết tham khảo tại: https://mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-log4j/
 

Bình luận