Logowanie sql w javie – log4jdbc

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:

  1. jdbc.sqlonly - najprostszy, pokazuje tylko zapytania SQL.
  2. jdbc.sqltiming - ukazane czasy wykonywania operacji, w większości przypadków ten jest wystarczający.
  3. jdbc.audit - wszystkie wywołania SQLowe oprócz ResultSet.
  4. 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

Napisz odpowiedź