2015-06-14 9 views
14

Wie können SQL-Anweisungen im Protokoll angezeigt werden? Ich benutze EBeans und es wird aus einigen Gründen nicht eingefügt, aber ich kann nicht sehen, was das Problem ist.Play 2.4 - Anzeige von SQL-Anweisungen in Logs

Ich habe versucht, meine Config zu bearbeiten:

db.default.logStatements=true 

und fügen Sie diese

<logger name="com.jolbox" level="DEBUG" /> 

logback.xml einige Antworten folgen fand ich online, aber es scheint nicht zu funktionieren 2.4 ...

Antwort

27

Die Protokollierung hat sich mit Play 2.4 geändert. Ab sofort, die SQL-Anweisungen in der Konsole angezeigt werden, fügen Sie einfach die folgende Zeile in die conf/logback.xml Datei:

<logger name="org.avaje.ebean.SQL" level="TRACE" /> 

Es sollte gut funktionieren.

+1

es möglich ist, tun es im Code? Nur aktivieren wenn Play.isDev()! –

+5

Um das Protokollieren von SQL-Anweisungen in der Produktion zu vermeiden, können Sie zwei verschiedene Dateien verwenden: die Standarddatei für die Entwicklung (logback.xml) und eine andere für die Produktion (logback-production.xml). Fügen Sie anschließend -Dlogger.resource = conf/logback-production.xml hinzu, um die Produktion zu verwenden. –

+1

Frage ist für Play 2.4, aber ab Play 2.6, ** org.avaje.ebean ** ist jetzt ** io.ebean ** – Flo354

5

FYI, es gibt ein nettes Video-Tutorial zu Ebean new doc page zeigt die Möglichkeit, SQL-Anweisungen nur für ausgewählte Bereiche des Codes zu erfassen.

Dank dieser können Sie Anweisungen nur an problematischen Stellen protokollieren, während Sie die protokollierten Anweisungen für die Durchführung von Tests wie showed in video entwickeln und/oder verwenden.

Kurz gesagt: in neueste avaje-ebeanorm-mocker Abhängigkeit zu Ihrem built.sbt als gewöhnlich, so später können Sie es in Ihrem Code verwenden wie:

LoggedSql.start(); 
User user = User.find.byId(123); 
// ... other queries 
List<String> capturedLogs = LoggedSql.stop(); 

Hinweis Sie brauchen nicht einmal die List von Aussagen zu holen wenn Sie sie nicht so verarbeiten müssen, wie sie normalerweise in der Konsole angezeigt werden. So können Sie es wie folgt verwenden auch:

if (Play.isDev()) LoggedSql.start(); 
User user = User.find.byId(345); 
// ... other queries 
if (Play.isDev()) LoggedSql.stop(); 
+0

Das funktioniert nicht für mich. Play 2.4.2 und "com.typesafe.sbt"% "sbt-play-eban"% "1.0.0", "org.avaje.eebeanorm"% "avaje-ebianorm-mocker"% "6.15.1" Ich bin leer werden Fehle ich etwas Offensichtliches? – Smith

7

aus dem Spiel 2.5 Protokollierung von SQL-Anweisungen sehr einfach ist, spielen 2.5 hat eine einfache Möglichkeit, SQL-Anweisungen zu protokollieren, auf jdbcdslog gebaut, die für alle JDBC-Datenbanken arbeitet, Verbindung Pool-Implementierungen und Persistenz-Frameworks (Anorm, Ebean, JPA, Slick usw.). Wenn Sie die Protokollierung aktivieren, sehen Sie jede an Ihre Datenbank gesendete SQL-Anweisung sowie Leistungsinformationen darüber, wie lange die Anweisung zur Ausführung benötigt.

Die Play-Log-Anweisung Funktion in SQL 2.5 kann durch Datenbank konfiguriert werden, logSql Eigenschaft mit:

db.default.logSql=true 

Danach können Sie die jdbcdslog-exp Protokollebene konfigurieren, indem Sie diese Zeilen zu logback.xml Zugabe:

<logger name="org.jdbcdslog.ConnectionLogger" level="OFF" /> <!-- Won' log connections --> 
    <logger name="org.jdbcdslog.StatementLogger" level="INFO" /> <!-- Will log all statements --> 
    <logger name="org.jdbcdslog.ResultSetLogger" level="OFF" /> <!-- Won' log result sets --> 
+0

Diese Protokolle werden nicht in der Konsole angezeigt – plambre

0

Ich hatte Erfolg mit jdbcdslog. Da @Saed Zarinfam here erwähnt wird, enthält Play 2.5 dies standardmäßig.

Im Gegensatz zu this answer zeigt diese Lösung die Parameterwerte anstelle von Fragezeichen.

Hier sind die Schritte, die ich folgte ihm für Play 2.4 und MySQL zum Laufen zu bringen:

Hinzufügen zu bauen.sbt:

"com.googlecode.usc" % "jdbcdslog" % "1.0.6.2" 

In logback.xml:

<logger name="org.jdbcdslog.StatementLogger" level="INFO" /> <!-- Will log all statements --> 

erstellen conf/jdbcdslog.properties Datei enthält:

jdbcdslog.driverName=mysql 
jdbcdslog.showTime=true 

ändern db.default.url (Beispiel):

jdbc:mysql://127.0.0.1:3306/mydb 

ändert sich zu jdbc:jdbcdslog:mysql://127.0.0.1:3306/mydb;targetDriver=com.mysql.jdbc.Driver

ändern db.default.driver:

org.jdbcdslog.DriverLoggingProxy