Description
P6Spy is a framework that enables database data to be seamlessly intercepted and manipulated with no code changes to existing application. The P6Spy distribution includes P6Log, an application which logs all JDBC transactions for any Java application us.
P6Spy official site : http://sourceforge.net/projects/p6spy/
--> Hiểu đơn giản P6Spy là một framework cho phép chúng ta log toàn bộ JDBC Transactions trong ứng dụng mà không phải đưa thêm/thay đổi bất kỳ dòng code nào vào trong ứng dụng -> việc log hoàn toàn độc lập với ứng dụng.
--> P6Spy không chỉ log các SQL Statement ( Trong JDBC tạo ra các Statement là câu query với các dấu ? , mỗi dấu ? đại diện cho một tham số ) mà nó cho phép log toàn bộ các Parameter Values đã được pass vào, tức là câu SQL hoàn chính với giá trị của param sẽ thực hiện cuối cùng với DB.
==> Rất tiện lợi cho mục đích debug.
Một ví dụ khi một Statement được log :
SELECT COUNT(*) AS COUNT_VALUE
FROM Users_Roles WHERE userId = ? AND roleId = ?
Note : với Hibernate thiết lập show_sql property là true để show ra các câu SQL .
--> Với P6Spy nó còn cho phép biết được các giá trị của các dấu ? là gì .
1366824587058|1|1|statement|SELECT COUNT(*) AS COUNT_VALUE FROM Users_Roles WHERE userId = ? AND roleId = ?
|SELECT COUNT(*) AS COUNT_VALUE FROM Users_Roles WHERE userId = '10195' AND roleId = '10163'
Tích hợp P6Spy trong liferay [ Hibernate]
Liferay sử dụng hibernate, do vậy việc tích hợp p6spy là khá tương đồng.
1. download file p6spy-install.jar từ http://sourceforge.net/projects/p6spy/
--> thực hiện giải nén và lấy hai file : p6spy.jar và spy.properties
sử dụng lastest version 1.3 ( modified 2003-12-01)
2. copy p6spy.jar vào thư mục lib của server,
ví dụ với tomcat tôi copy vào : liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\lib\ext
Note : trong thư mục giải nén có chứa cả guide --> có thể tham khảo cho các server khác nhau.
3. Đưa file spy.properties vào ClassPath.
file spy.properties chứa các thông tin cấu hình cho p6spy. để p6spy có thể đọc được thì ta cần đưa nó vào classpath.
ta có hai cách:
-- các đơn gian là đặt nó vào root folder của project: với liferay tôi copy nó vào :\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\ROOT\WEB-INF\classes
==> nó được load tương tự các file portal-*.properties hay service-*.properties.
-- các hai là thiết lập -Dp6.home vào JAVA_OPTS để chỉ ra folder chứa file spy.properties.
ví dụ với tomcat trên window --> tìm vào thêm dòng in đậm với đường dẫn thích hợp trên máy của bạn
.....\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\bin\setenv.bat
set "JAVA_OPTS=%JAVA_OPTS% -Dp6.home=D:/apps/liferay/liferay-portal-tomcat-6.1/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/lib/ext
-Dfile.encoding=UTF8 -Djava.net.preferIPv4Stack=true -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false -Duser.timezone=GMT -Xmx1024m -XX:MaxPermSize=256m"
4. edit spy.properties
- Có một property bắt buộc cần edit đó là : realdriver --> tương ứng với driver của db bạn đang connect tới
ví dụ với MYSQL:
# mysql Connector/J driver
realdriver=com.mysql.jdbc.Driver
- thuộc tính thứ hai cần lưu ý là chỉ ra vị trí của file log
ví dụ :
logfile = D:/apps/liferay/liferay-portal-tomcat-6.1/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/logs/spy.log
- thuộc tính khác là : log4j.logger.p6spy chỉ ra Level được log
ví dụ log4j.logger.p6spy=INFO,STDOUT
5. Cầu hình JDBC trong portal-ext.properties với driver class là P6SpyDriver class của p6spy.
jdbc.default.driverClassName=com.p6spy.engine.spy.P6SpyDriver
jdbc.default.username=root
jdbc.default.url=jdbc:mysql://localhost/lportal?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
#
# Set other miscellaneous Hibernate properties.
#
hibernate.show_sql=true
final : Run server và tay sẽ thấy file spy.log tương ứng ở vị trí đã config khi thực hiện các query thì chúng sẽ được log tại đây. Điều chính Log Level cho phù hợp với mục địch.
Lưu ý : việc tích hợp p6spy giảm thiểu tối đa thời gian cho việc debug, và sử dụng nó trong môi develop, khi ứng dụng được triển khai trên môi trường product thì cần loại bỏ p6spy.
---------------------------------------------------------------------------------------------------------
Một số framework khác
LOG4JDBC
https://code.google.com/p/log4jdbc/JDBC proxy driver for logging SQL and other interesting information.
log4jdbc is a Java JDBC driver that can log SQL and/or JDBC calls (and optionally SQL timing information) for other JDBC drivers using theSimple Logging Facade For Java (SLF4J) logging system.
2012-02-17: log4jdbc 1.2 final release! (It's about time, huh?) Full changelist here.
JDBC SQL Profiler
http://sourceforge.net/projects/sqlprofiler/?source=recommendedDescription
Have you ever wondered which database indexes you should create for your JDBC-based application ? This Swing-based SQL profiler tries to offer a tool to monitor which tables and columns are accessed the most in SQL queries to recommend index creation
JDBC Logger
http://sourceforge.net/projects/jdbclogger/?source=recommendedDescription
jdbclogger is a Java tool that intercepts and logs all database statements that use JDBC.
JDBC Logger Web Site
Elvyx
http://sourceforge.net/projects/elvyx/?source=recommendedDescription
Elvyx is a tool designed to monitor and profile the jdbc activity on java projects. This jdbc profiler has a server with a built-in db and a client to improve the experience.
No comments:
Post a Comment