log4jdbc mit MySQL und Wildfly

log4jdbc mit MySQL und Wildfly

Kurzanleitung zur Aktivierung von log4jdbc mit slf4j auf einen Wildfly (10) und MySQL Datenbank

 

Download log4jdbc

https://code.google.com/archive/p/log4jdbc-log4j2/downloads

Empfehlung von Google:

  • If you are using Java 5, you should use the JDBC 3 version of log4jdbc-log4j2.
  • For Java 6, the JDBC 4 version of log4jdbc-log4j2.
  • For Java 7, the JDBC 4.1 version of log4jdbc-log4j2

Zum jetzigen Zeitpunkt für Wildfly 10 mit Java 8: log4jdbc-log4j2-jdbc4.1-1.16.jar

 

Wildfly Modul erstellen

1. Modul Verzeichnis für log4jdbc im Wildfly anlegen und Jar kopieren

Verzeichnisstruktur erzeugen: %wildfly-base%\modules\system\layers\base\net\sf\log4jdbc\main\

log4jdbc-log4j2-jdbc4.1-1.16.jar unter main ablegen

2. module.xml erzeugen

<module xmlns="urn:jboss:module:1.1" name="net.sf.log4jdbc">
 <resources>
   <resource-root path="log4jdbc-log4j2-jdbc4.1-1.16.jar"/>
 </resources>
  <dependencies>
   <module name="javax.api"/>
   <module name="javax.transaction.api"/>
   <module name="org.slf4j"/>
   <module name="com.mysql"/> 
  </dependencies>
</module>

Achtung: Das Module „com.mysql“ muss ebenfalls konfiguriert sein. Siehe Beispiel MySQL-Module.xml

 

Standalone.xml anpassen

Backup nicht vergessen!

System-Properties hinzufügen

 <system-properties>
   <property name="log4jdbc.spylogdelegator.name" value="net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator"/>
   <property name="log4jdbc.sqltiming.warn.threshold" value="1000" />
   <property name="log4jdbc.sqltiming.error.threshold" value="5000" />
 </system-properties>

Abfragen die länger als 1000ms dauern, werden auf dem warn level geloggt und Abfragen die länger 5000ms dauern auf dem error level.

 

Logger categories hinzufügen

<logger category="jdbc">
 <level name="WARN"/>
</logger>
<logger category="jdbc.sqltiming ">
 <level name="INFO"/>
</logger>

 

Datasources anpassen

Die <connection-url> wird ergänzt um ein :log4jdbc und der Treiber wird ausgetauscht mit log4jdbc.

z.B.

... 
<connection-url>jdbc:log4jdbc:mysql://localhost:3306/MyDatabase</connection-url>
<driver>log4jdbc</driver>
....

 

Treiber hinzufügen

 <driver name="log4jdbc" module="net.sf.log4jdbc">
   <driver-class>net.sf.log4jdbc.sql.jdbcapi.DriverSpy</driver-class>
 </driver>

 

Umleiten der Logmelden nach sql-timing.log

Zum Umleiten der Logmeldungen muss die Logger Kategorie angepasst werden und ein Log-Handler hinzugefügt werden.

Handler

<periodic-rotating-file-handler name="SQL_TIMING">
  <level name="ALL"/>
  <formatter>
    <pattern-formatter pattern="%d %-5p [%c{1}] %s%E%n"/>
  </formatter>
  <file relative-to="jboss.server.log.dir" path="sql-timing.log"/>
  <suffix value=".yyyy-MM-dd"/>
  <append value="true"/>
</periodic-rotating-file-handler>

 

Angepasster Logger

<logger category="jdbc.sqltiming" use-parent-handlers="false">
  <level name="INFO"/>
  <handlers>
    <handler name="SQL_TIMING"/>
  </handlers>
</logger>

 

Sonstiges

Beispiel MySQL-Module.xml

<module xmlns="urn:jboss:module:1.1" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.35-bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>

Quellen

  • http://sfleiter.github.io/blog/2013/12/08/jboss-datasource-proxy-with-log4jdbc-log4j2/
  • https://code.google.com/archive/p/log4jdbc-log4j2/

Schreibe einen Kommentar