2015-06-14 19 views
14

Come visualizzare le istruzioni SQL nel registro? Sto usando EBeans e non riesce a inserirli per qualche motivo, ma non riesco a vedere qual è il problema.Riproduzione 2.4 - Visualizzazione dell'ebside SQL nei registri

Ho provato a modificare il mio config:

db.default.logStatements=true 

e aggiungere questo al logback.xml

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

seguire alcune risposte che ho trovato on-line, ma non sembra funzionare per 2.4 ...

risposta

27

La registrazione è stata modificata con Play 2.4. A partire da oggi, per visualizzare le istruzioni SQL nella console, è sufficiente aggiungere la seguente riga al file conf/logback.xml:

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

Si dovrebbe funzionare bene.

+1

E 'possibile farlo in codice? Attiva solo quando Play.isDev()! –

+5

Per evitare dichiarazioni registrazione SQL in produzione, è possibile utilizzare due file diversi: l'uno di default per lo sviluppo (logback.xml) e un altro per la produzione (logback-production.xml). Quindi, per utilizzare quello di produzione, aggiungere -Dlogger.resource = conf/logback-production.xml. –

+1

La domanda è for Gioca 2.4, ma come di Play 2.6, ** ** org.avaje.ebean è ora ** ** io.ebean – Flo354

5

FYI, c'è un bel video tutorial su Ebean new doc page che mostra il modo per acquisire istruzioni SQL solo per aree selezionate del codice.

Grazie a ciò è possibile registrare le istruzioni solo in posizioni problematiche durante lo sviluppo e/o l'utilizzo delle istruzioni registrate per l'esecuzione di test come showed in video.

In breve: aggiungere ultima avaje-ebeanorm-mocker dipendenza al built.sbt come di solito, così più tardi lo si può utilizzare nel codice come:

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

Nota che non c'è nemmeno bisogno di prendere il List di dichiarazioni se non è necessario elaborarli come vengono visualizzati nella console come di solito. Così si può utilizzare in questo modo così:

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

Questo non funziona per me. Gioca 2.4.2 e "com.typesafe.sbt" % "SBT-play-ebean" % "1.0.0", "org.avaje.ebeanorm" % "avaje-ebeanorm-beffardo" % "6.15.1" Sono ottenere set vuoto. Mi manca qualcosa di ovvio? – Smith

7

dal gioco istruzioni SQL 2.5 di registrazione è molto semplice, il gioco 2.5 ha un modo semplice per accedere istruzioni SQL, costruita su jdbcdslog, che funziona su tutti i database JDBC, collegamento implementazioni di pool e strutture di persistenza (Anorm, Ebean, JPA, Slick, ecc.). Quando si attiva la registrazione vedrete ogni istruzione SQL inviata al database, così come le informazioni sulle prestazioni di quanto tempo la dichiarazione prende a correre.

La funzione di log dichiarazione SQL in Play 2.5 può essere configurato dal database, utilizzando logSql proprietà:

db.default.logSql=true 

Dopo di che, è possibile configurare il livello di log jdbcdslog-exp aggiungendo queste righe a logback.xml:

<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

Questi log non appaiono nella console – plambre

0

Ho avuto successo utilizzando jdbcdslog. Come @Saeed Zarinfam menzionato here, Play 2.5 include questo per impostazione predefinita.

differenza this answer, questa soluzione sono riportati i valori dei parametri, invece di punti interrogativi.

qui sono i passi che ho seguito per farlo funzionare for Gioca 2.4 e MySQL:

Add a costruire.SBT:

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

Aggiunga al logback.xml:

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

Creare conf/file di jdbcdslog.properties contenente:

jdbcdslog.driverName=mysql 
jdbcdslog.showTime=true 

Change db.default.url (esempio):

jdbc:mysql://127.0.0.1:3306/mydb 

modifiche jdbc:jdbcdslog:mysql://127.0.0.1:3306/mydb;targetDriver=com.mysql.jdbc.Driver

Cambio db.default.driver:

org.jdbcdslog.DriverLoggingProxy