Tag Archiv für MySQL

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/