2016-12-06 3 views
4

Ich habe eine einfache Spring-Boot-mybatis-App (bitte beachten Sie). Mybatis protokolliert SQL-Abfragen nur im Fehlerfall (bei Ausnahmen). Sag mir bitte, wie man es erzwingt, alle SQL-Abfrage auf Konsole zu protokollieren?Spring-boot mit spring-mybatis - wie man es zur Protokollierung aller SQL-Abfragen erzwingt

In diesem Moment verwende ich slf4j Logger (automatisch von spring-boot konfiguriert).
Ich finde diesen Link:
jedoch habe ich es nicht geschafft, es zu folgen. Zunächst einmal wird die Konfiguration für log4j angezeigt, und ich bin mir nicht sicher, ob ich richtig verstehe: Ist es ausreichend, in application.properties zu konfigurieren?

Vielen Dank im Voraus

Antwort

7

Spring Boot verwendet Logback als Standard-Logging-Provider für Slf4j. Ibatis interne Log-Factory lädt den SLF4j als Logger der ersten Wahl. Alles, was Sie tun müssen, ist, Ihren Spring Boot Logger so zu konfigurieren, dass er Protokollnachrichten für den Ibatis Mapper veröffentlicht.

Fügen Sie die folgenden Zeilen in den Eigenschaften der Boot-Anwendung hinzu.

In der zweiten Zeile definieren Sie den Protokolleintrag für Ibatis mapper mit DEBUG log level. com.spring.ibatis ist Paket und die UserMapper ist Beispiel-Mapper.

Die folgenden Protokolle werden in der Konsole und in der Spring-Boot-Logging-Datei angezeigt. Dies sind die Protokollmeldungen, die von saveUser und findByName Methoden der ApplicationTest Klasse generiert werden.

2016-12-19 22:07:06.358 INFO 7248 --- [main] com.spring.ibatis.ApplicationTest  : Started ApplicationTest in 3.048 seconds (JVM running for 4.209) 
2016-12-19 22:07:06.424 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.saveUser : ==> Preparing: insert into users(name) values(?) 
2016-12-19 22:07:06.444 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.saveUser : ==> Parameters: ibatis(String) 
2016-12-19 22:07:06.445 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.saveUser : <== Updates: 1 
2016-12-19 22:07:06.457 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.findByName : ==> Preparing: select name from users WHERE name=? 
2016-12-19 22:07:06.470 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.findByName : ==> Parameters: ibatis(String) 
2016-12-19 22:07:06.504 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.findByName : <==  Total: 1 

Sie können natürlich jede gewünschte Logger-Konfiguration konfigurieren. Ich kann leicht ein Beispiel für irgendeinen anderen Logger hinzufügen, wenn Sie brauchen.

Sie können den vollständigen Code mit JUnit-Testfälle bei https://github.com/saagar2000/ibatis

0

SLF4J nicht log4j ersetzen wird, arbeiten sie zusammen. Es entfernt die Abhängigkeit von log4j aus Ihrer Bibliothek/App.

https://softwareengineering.stackexchange.com/questions/108683/slf4j-vs-log4j-which-one-to-prefer

So ist es in Ordnung log4j Konfigurationen zu verwenden, wenn Sie slf4j verwenden, solange Sie log4j unter slf4j verwenden.

Hier ist eine Anleitung, die ich gefunden, dass die Gespräche über slf4j mit log4j Logger: http://saltnlight5.blogspot.ca/2013/08/how-to-configure-slf4j-with-different.html

Im Wesentlichen nur erstellen müssen Sie eine Properties-Datei hier: src/main/resources/log4j.properties und haben es das gleiche wie das in Ihrem Link konfiguriert. Und wie Ihr Link sagt:

... Zu diesem Zweck werden SQL-Anweisungen auf der Debug-Level angemeldet (FINE in JDK Logging) und die Ergebnisse auf der TRACE Ebene (FINER in JDK Logging) ...

Stellen Sie sicher, dass Sie in Ihrer Eigenschaftendatei log4j.logger.org.mybatis.example=DEBUG festgelegt haben.

-1

finden, wenn Sie Mybatis mit JPArepository verwenden das funktioniert, fügen Sie diese zu Ihrer application.properties

spring.jpa.properties.hibernate.show_sql=true 
    spring.jpa.properties.hibernate.use_sql_comments=true 
    spring.jpa.properties.hibernate.format_sql=true 
    spring.jpa.properties.hibernate.type=trace 
0

Ein alternativer Ansatz Datei ist, einen Proxy-Treiber wie log4jdbc2 zu verwenden, der den Vorteil hat, das genaue SQL zu protokollieren, das mit den vorhandenen Parametern zur Datenbank geht, anders als die anderen Antworten. Dies funktioniert unabhängig von der Persistenz-Abstraktionsschicht (z. B. iBatis, JPA usw.).

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

Eine große Bequemlichkeit dafür ist, dass Sie die SQL direkt in Ihrem DB-Frontend kopieren und ausführen können, wie es ist.

1 Fügen Sie Maven Abhängigkeiten:

<dependency> 
    <groupId>org.bgee.log4jdbc-log4j2</groupId> 
    <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId> 
    <version>1.16</version> 
</dependency> 

2 Add logback Konfiguration. Kopieren Sie die relevanten Teile Ihrer bestehenden logback.xml

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 
     </pattern> 
    </encoder> 
</appender> 

<logger name="jdbc.audit" level="ERROR" /> 
<logger name="jdbc.connection" level="ERROR" /> 
<logger name="jdbc.sqltiming" level="ERROR" /> 
<logger name="jdbc.resultset" level="ERROR" /> 

<!-- UNCOMMENT THE BELOW TO HIDE THE RESULT SET TABLE OUTPUT --> 
<!--<logger name="jdbc.resultsettable" level="ERROR" /> --> 

<root level="debug"> 
    <appender-ref ref="STDOUT" /> 
</root> 

3 Tells log4jdbc2 über Ihre Logging-config:

Erstellen Sie eine Datei mit dem Namen log4jdbc.log4j2. Eigenschaften an der Wurzel des Klassenpfads src/test/resources oder src/main/resources in einem Maven-Projekt. Diese Datei hat eine Linie, die die unten:

log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

4 Ändern Sie Ihre DB-Treiberklasse und URL wie folgt:

spring.database.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy 
#append log4jdbc after jdbc part of the URL: hsql example 
spring.datasource.url=jdbc:log4jdbc:hsqldb:mem:db_name 

Neben der Protokollierung von SQL werden auch die Ergebnisse aller ausgeführten Abfragen im Tabellenformat protokolliert. Dies kann gemäß dem Kommentar in der Beispielprotokollierungskonfiguration deaktiviert werden.

Beispielausgabe:

10:44:29.400 [main] DEBUG jdbc.sqlonly - 
5. select memberrole0_.member_id as member_i2_12_0_, memberrole0_.id as id1_12_0_, memberrole0_.id 
as id1_12_1_, memberrole0_.member_id as member_i2_12_1_, memberrole0_.role_id as role_id3_12_1_, 
role1_.id as id1_17_2_, role1_.name as name2_17_2_ from member_roles memberrole0_ left outer 
join roles role1_ on memberrole0_.role_id=role1_.id where memberrole0_.member_id=104 

10:44:29.402 [main] INFO jdbc.resultsettable - 
|----------|---|---|----------|--------|---|-----| 
|member_id |id |id |member_id |role_id |id |name | 
|----------|---|---|----------|--------|---|-----| 
|----------|---|---|----------|--------|---|-----| 
+0

Dank you very much! –

Verwandte Themen