Zdecydowana większość pewnie słyszała o log4j, wiele osób też go używało i uważa za dobre narzędzie. Jednak co zrobić jak chcemy sprawdzić jakie operacje na bazie danych są wykonywane w naszej aplikacji a jeszcze lepiej ich czasy. Tutaj z pomocą przychodzi nam log4jdbc. Proste narzędzie, które pozwala nam logować informacje o zapytaniach, kwerendach i to dosyć szczegółowo.
W log4jdbc dostajemy 4 loggery:
-
jdbc.sqlonly - najprostszy, pokazuje tylko zapytania SQL.
-
jdbc.sqltiming - ukazane czasy wykonywania operacji, w większości przypadków ten jest wystarczający.
-
jdbc.audit - wszystkie wywołania SQLowe oprócz ResultSet.
-
jdbc.resultset - wszystko łącznie z ResulSet.
Całą konfigurację log4jdb możemy zdefiniować w pliku log4j.xml a tutaj znajduje się przykładowy plik log4j.xml z włączonym logowaniem zapytań do bazy danych.
Osobiście polecam takiego appendera
<appender name=”sql-timing-appender” class=”org.apache.log4j.RollingFileAppender”>
<param name=”File” value=”ścieżka_gdzie_zapisać_log/sql.log”/>
<param name=”Append” value=”true”/>
<param name=”Encoding” value=”UTF-8″/>
<param name=”MaxFileSize” value=”10000KB”/>
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern” value=”—–> %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n”/>
</layout>
</appender>
ponieważ możemy zdefiniować tutaj rozmiar logów a także plik za każdym razem będzie dopisywany do wcześniejszych logów a nie tworzony nowy.
Jak już mamy konfigurację zapisu to jeszcze potrzebujemy biblioteki. W pracy korzystałem z następujących (nie mogę tutaj wrzucić archiwów a na jakiś hostingu plików to zginie szybko, więc po nazwach będzie można je znaleźć) .
- log4jdbc3-1.1beta
- slf4j-api-1.4.3
- slf4j-log4j12-1.4.3
Ostatnia rzeczą jaką wykonujemy jest zdefiniowanie połączenia z bazą danych na nowych ustawieniach. Zmieniamy sterownik na net.sf.log4jdbc.DriverSpy , który obsługuje najbardziej popularne bazy danych. Jeśli, którejś nam brak to zawsze możemy ustawić we właściwościach log4jdbc aby wskazywał na dany sterownik. A także zamieniamy stary adres lokalizacji bazy:
jdbc:derby://localhost:1527//db-derby-10.2.2.0-bin/databases/MyDatabase na
jdbc:log4jdbc:derby://localhost:1527//db-derby-10.2.2.0-bin/databases/MyDatabase
Po zakończeniu zbierania logów należy przywrócić poprzednie ustawienia połączenia z bazą, ponieważ na tym sterowniku baza danych chodzi dużo wolniej niż na natywnym, zaobserwowane na przykładzie sterownika posgresql