2015-06-14 31 views
14

Jak wyświetlić instrukcje SQL w dzienniku? Używam EBeans i nie można go wstawić z pewnych powodów, ale nie widzę problemu.Play 2.4 - Wyświetlanie instrukcji SQL Ebeans w dziennikach

Próbowałem edytować config:

db.default.logStatements=true 

i dodać do logback.xml

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

przestrzegać pewnych odpowiedź znalazłem w Internecie, ale nie wydaje się do pracy 2,4 ...

Odpowiedz

27

Logging zmieniła się z luzem 2.4. Począwszy od teraz, aby wyświetlić instrukcje SQL w konsoli, wystarczy dodać następującą linię do pliku conf/logback.xml:

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

powinno działać dobrze.

+1

Jest to możliwe to zrobić w kodzie? Aktywuj tylko, gdy Play.isDev()! –

+5

Aby uniknąć rejestrowania instrukcji SQL w produkcji, można użyć dwóch różnych plików: domyślnego do programowania (logback.xml) i innego do produkcji (logback-production.xml). Następnie, aby użyć wersji produkcyjnej, dodaj -Dlogger.resource = conf/logback-production.xml. –

+1

Pytanie dotyczy Play 2.4, ale od wersji 2.6, ** org.avaje.ebean ** jest teraz ** io.ebean ** – Flo354

5

FYI, jest fajny samouczek wideo na temat Ebean's new doc page pokazujący sposób przechwytywania instrukcji SQL tylko dla wybranych obszarów kodu.

Dzięki temu można sprawozdań tylko w problematycznych miejscach log przy opracowywaniu i/lub stosowanie zalogowanego sprawozdań do wykonywania testów jak showed in video.

W skrócie: dodać ostatnią zależność avaje-ebeanorm-mocker do built.sbt jak zwykle, więc później można go używać w kodzie jak:

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

Uwaga Nie trzeba nawet pobrać List sprawozdań jeśli nie musisz ich przetwarzać, jak zwykle są wyświetlane w konsoli. Więc można go używać tak jak dobrze:

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

To nie działa dla mnie. Zagraj w 2.4.2 i "com.typesafe.sbt"% "sbt-play-ebean"% "1.0.0", "org.avaje.ebeanorm"% "avaje-ebeanorm-mocker"% "6.15.1" Jestem uzyskiwanie pustego zestawu. Czy brakuje mi czegoś oczywistego? – Smith

7

z gry 2,5 rejestrowania SQL jest bardzo proste, Play 2.5 ma łatwego sposobu, aby się zalogować SQL, zbudowany na jdbcdslog, który działa we wszystkich JDBC bazy danych, połączenia implementacje puli i struktury utrzymywania (Anorm, Ebean, JPA, Slick, itp.). Po włączeniu rejestrowania zobaczysz każdy komunikat SQL wysłany do bazy danych, a także informacje o wydajności dotyczące czasu trwania instrukcji.

SQL cechą wyciągu dziennik w grze 2.5 mogą być konfigurowane przez bazę danych, za pomocą właściwości logSql:

db.default.logSql=true 

Po tym, można skonfigurować poziom dziennika jdbcdslog-exp dodając ten linie 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

Te dzienniki nie pojawiają się w konsoli – plambre

0

miałem sukces przy użyciu jdbcdslog. Jak @Saeed Zarinfam wspomniał o here, gra 2.5 domyślnie zawiera to.

przeciwieństwie this answer rozwiązanie to pokazuje wartości parametrów zamiast znaków zapytania.

Oto kroki I przestrzegać, aby uzyskać jego pracy dla Play 2.4 i MySQL:

Dodaj do budowy.SBT:

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

Dodaj do logback.xml:

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

Tworzenie pliku conf/jdbcdslog.properties zawierającą:

jdbcdslog.driverName=mysql 
jdbcdslog.showTime=true 

Zmień db.default.url (przykład):

jdbc:mysql://127.0.0.1:3306/mydb 

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

Zmień db.default.driver:

org.jdbcdslog.DriverLoggingProxy