Żadne z przedstawionych rozwiązań nie działa dla mnie. Piszę to, żeby wszyscy wiedzieli, jak bardzo jestem zdesperowany.
Andrea
Odpowiedzi:
131
Oprawa
datasource {
...
logSql = true
}
w DataSource.groovy (zgodnie z tymi instrukcjami) wystarczyło, aby dostać pracę w moim otoczeniu. Wygląda na to, że części FAQ są nieaktualne (np. Pytanie „wiele do wielu kolumn wstecz”), więc może to też się zmienić w międzyczasie.
logSql=truesam nie wystarczy. Rejestrowanie hibernacji również musi być włączone. Zobacz odpowiedź @ Pete'a.
Jason
2
Zauważyłem, że nie obejmuje to wartości, które pojawiają się w instrukcjach SQL, w których znajdują się znaki „?”.
Jason
1
To działa, ale w przypadku wszystkich zapytań. Czy można również wydrukować wygenerowany plik sql dla określonych kryteriów bez konieczności ustawiania logSql = true?
sierpień
@Guus, jak mogę wydrukować wygenerowany plik sql dla określonych kryteriów?
biniam
@biniam_Ethiopia O ile wiem, nie jest to możliwe. Chcę tego, ponieważ jest to denerwujące w przypadku debugowania niektórych klas i nie chce widzieć również innych zapytań.
sierpnia
91
Uważam, że bardziej przydatne jest wykonanie następujących czynności, które polegają na umożliwieniu rejestrowania przez Hibernate rejestrowania kodu SQL wraz ze zmiennymi powiązanymi (aby można było zobaczyć wartości przekazywane do wywołań i łatwo replikować kod SQL w edytorze lub w inny sposób).
W swoim Config.groovy, dodaj do swojego bloku log4j:
log4j = {
// Enable Hibernate SQL logging with param valuestrace'org.hibernate.type'
debug 'org.hibernate.SQL'
//the rest of your logging config
// ...
}
Używałem tego wiele razy. Jedna uwaga: wyprowadzanie parametrów jest bardzo kosztowne. Zalecałbym zrobienie tego tylko na twoim dev boxie.
John Gordon
2
Możesz również dodać format_sql = truedo hibernatebloku swojego, DataSource.groovyaby uzyskać ładnie sformatowane wyjście.
Gregor Petrin
1
Uwaga: spowoduje to zarejestrowanie zarówno parametrów klauzuli where, jak i wartości kolumn wyodrębnionych z zestawów wyników zapytania. Aby rejestrować tylko w przypadku parametrów klauzuli, użyjtrace 'org.hibernate.type.BasicBinder'
GreenGiant
Czy ktoś zna odpowiednik Grailsów 3.3.8?
John Little,
Z jakiegoś powodu niepoprawne składniowo zapytania (generowane przez samą Hibernate, niestety!) Nie są rejestrowane - wszystkie inne zapytania są rejestrowane ... Prawdopodobnie problem z samą Hibernate?
Janaka Bandara
32
Za Graile 3. *
Opcja nr 1: dodaj następujące elementy do logback.groovy
Pozwala uniknąć problemów z wydajnością związanych z rejestrowaniem śledzenia typepakietu Hibernate . Działa to z Hibernate 3.6 i nowszymi wersjami. Mam to z: https://burtbeckwith.com/blog/?p=1604
Rozwiązanie służy tylko do rozwoju, a nie do produkcji.
Wszystkie powyższe odpowiedzi działają i są poprawne. Ale nie pokazują całego zapytania w sposób czytelny dla człowieka. Jeśli chcesz zobaczyć ostatnie (bez?,?) Zapytanie, masz dwie opcje.
A) proxy połączenia JDBC za pomocą log4jdbc lub p6Spy.
B) spójrz na to na poziomie bazy danych. Na przykład bardzo łatwe do zrobienia z mysql.
Dowiedz się, gdzie znajduje się plik general_log_file. Aktywny dziennik ogólny, jeśli nie został jeszcze aktywowany.
mysql command line> showvariableslike"%general_log%";
mysql command line> setglobal general_log = true;
Teraz wszystko jest zapisywane w pliku dziennika. Przykład Mac / linux, aby pokazać ładny strumień zapytań.
Pure tylko w celach informacyjnych, ale używam p6spy do rejestrowania zapytań SQL. To mały pośredni sterownik jdbc. Dokładne zapytanie jest rejestrowane tak, jakby było wysłane do serwera (z uwzględnieniem parametrów).
uwzględnij to w swoim projekcie:
runtime 'p6spy:p6spy:3.0.0'
Zmień sterownik źródła danych:
driverClassName: com.p6spy.engine.spy.P6SpyDriver
I Twój adres URL jdbc:
url: jdbc:p6spy:mysql://
Skonfiguruj go za pomocą spy.properties (w grails-app / conf).
Wiem, że zadawano to pytanie i odpowiadałem na nie dawno temu, ale właśnie zdarzyło mi się zobaczyć to pytanie i nie mogłem się powstrzymać przed udzieleniem odpowiedzi lub udostępnieniem naszego podejścia do implementacji logowania sql w naszym projekcie. Mam nadzieję, że to pomoże.
Obecnie jest w środowisku deweloperskim. Używamy „log4jdbc Driver Spy” do logowania sql.
Konfiguracja:
W swoim BuildConfig.groovy: dodaj poniższe zależności:
Z własnego doświadczenia wynika, że jest to przydatne i pomocne podczas debugowania. Więcej informacji można znaleźć na tej stronie. https://code.google.com/p/log4jdbc-remix/
Jest to odmiana wielu z powyższych rozwiązań, ale umożliwia dostosowanie wartości w czasie wykonywania. I podobnie jak inne rozwiązania, które sobie z tym radzą logToStdout, pokazuje tylko zapytania, a nie wartości wiązania.
Pomysł został skradziony z burtbeck z wpisem, który przeczytałem kilka lat temu, którego nie mogę teraz znaleźć. Został zredagowany do pracy z Grails 3.3.
Podobnej techniki można użyć do włączenia logowania dla określonych testów integracyjnych:
Odpowiedzi:
Oprawa
w DataSource.groovy (zgodnie z tymi instrukcjami) wystarczyło, aby dostać pracę w moim otoczeniu. Wygląda na to, że części FAQ są nieaktualne (np. Pytanie „wiele do wielu kolumn wstecz”), więc może to też się zmienić w międzyczasie.
źródło
logSql=true
sam nie wystarczy. Rejestrowanie hibernacji również musi być włączone. Zobacz odpowiedź @ Pete'a.Uważam, że bardziej przydatne jest wykonanie następujących czynności, które polegają na umożliwieniu rejestrowania przez Hibernate rejestrowania kodu SQL wraz ze zmiennymi powiązanymi (aby można było zobaczyć wartości przekazywane do wywołań i łatwo replikować kod SQL w edytorze lub w inny sposób).
W swoim
Config.groovy
, dodaj do swojego bloku log4j:log4j = { // Enable Hibernate SQL logging with param values trace 'org.hibernate.type' debug 'org.hibernate.SQL' //the rest of your logging config // ... }
źródło
format_sql = true
dohibernate
bloku swojego,DataSource.groovy
aby uzyskać ładnie sformatowane wyjście.trace 'org.hibernate.type.BasicBinder'
Za Graile 3. *
Opcja nr 1: dodaj następujące elementy do logback.groovy
lub
Opcja nr 2 dodaj następujące elementy do dataSource w pliku application.yml. Jednak to podejście nie rejestruje wartości parametrów
źródło
Spróbuj tego:
Pozwala uniknąć problemów z wydajnością związanych z rejestrowaniem śledzenia
type
pakietu Hibernate . Działa to z Hibernate 3.6 i nowszymi wersjami. Mam to z: https://burtbeckwith.com/blog/?p=1604źródło
Rozwiązanie służy tylko do rozwoju, a nie do produkcji.
Wszystkie powyższe odpowiedzi działają i są poprawne. Ale nie pokazują całego zapytania w sposób czytelny dla człowieka. Jeśli chcesz zobaczyć ostatnie (bez?,?) Zapytanie, masz dwie opcje.
A) proxy połączenia JDBC za pomocą log4jdbc lub p6Spy.
B) spójrz na to na poziomie bazy danych. Na przykład bardzo łatwe do zrobienia z mysql.
Dowiedz się, gdzie znajduje się plik general_log_file. Aktywny dziennik ogólny, jeśli nie został jeszcze aktywowany.
mysql command line> show variables like "%general_log%"; mysql command line> set global general_log = true;
Teraz wszystko jest zapisywane w pliku dziennika. Przykład Mac / linux, aby pokazać ładny strumień zapytań.
źródło
Pure tylko w celach informacyjnych, ale używam p6spy do rejestrowania zapytań SQL. To mały pośredni sterownik jdbc. Dokładne zapytanie jest rejestrowane tak, jakby było wysłane do serwera (z uwzględnieniem parametrów).
uwzględnij to w swoim projekcie:
Zmień sterownik źródła danych:
I Twój adres URL jdbc:
Skonfiguruj go za pomocą spy.properties (w grails-app / conf).
Nie zapomnij wyłączyć tego na potrzeby produkcji!
źródło
Dalej działa dla mnie:
grails-app / conf / application.yml
# ... hibernate: format_sql: true # <<<<<<< ADD THIS <<<<<<< cache: queries: false use_second_level_cache: true # ... environments: development: dataSource: logSql: true // <<<<<<< ADD THIS <<<<<<< dbCreate: create-drop url: jdbc:h2:mem:... # ...
grails-app / conf / logback.groovy
// ... appender('STDOUT', ConsoleAppender) { encoder(PatternLayoutEncoder) { pattern = "%level %logger - %msg%n" } } // >>>>>>> ADD IT >>>>>>> logger 'org.hibernate.type.descriptor.sql.BasicBinder', TRACE, ['STDOUT'] logger 'org.hibernate.SQL', TRACE, ['STDOUT'] // <<<<<<< ADD IT <<<<<<< root(ERROR, ['STDOUT']) def targetDir = BuildSettings.TARGET_DIR // ...
Źródło: http://sergiodelamo.es/log-sql-grails-3-app/
źródło
Wiem, że zadawano to pytanie i odpowiadałem na nie dawno temu, ale właśnie zdarzyło mi się zobaczyć to pytanie i nie mogłem się powstrzymać przed udzieleniem odpowiedzi lub udostępnieniem naszego podejścia do implementacji logowania sql w naszym projekcie. Mam nadzieję, że to pomoże.
Obecnie jest w środowisku deweloperskim. Używamy „log4jdbc Driver Spy” do logowania sql.
Konfiguracja:
W swoim BuildConfig.groovy: dodaj poniższe zależności:
A w swoim źródle danych lub innej konfiguracji związanej z: [gdziekolwiek zdefiniowałeś konfigurację związaną ze źródłem danych], dodaj:
Z własnego doświadczenia wynika, że jest to przydatne i pomocne podczas debugowania. Więcej informacji można znaleźć na tej stronie. https://code.google.com/p/log4jdbc-remix/
Z poważaniem
źródło
Dla konkretnego bloku kodu możemy również stworzyć metodę akceptującą zamknięcie. na przykład.
źródło
Jeśli masz zainstalowaną wtyczkę konsoli , możesz uzyskać rejestrowanie sql za pomocą tego małego fragmentu kodu.
Jest to odmiana wielu z powyższych rozwiązań, ale umożliwia dostosowanie wartości w czasie wykonywania. I podobnie jak inne rozwiązania, które sobie z tym radzą
logToStdout
, pokazuje tylko zapytania, a nie wartości wiązania.Pomysł został skradziony z burtbeck z wpisem, który przeczytałem kilka lat temu, którego nie mogę teraz znaleźć. Został zredagowany do pracy z Grails 3.3.
Podobnej techniki można użyć do włączenia logowania dla określonych testów integracyjnych:
Spowoduje to włączenie logowania sql tylko dla testów w tym jednym pliku.
źródło