2013-09-05 7 views
16

mam crearte log4j.properties plik jak poniżej:obejmują log4j właściwości pliku w hibernacji, aby wyświetlić zapytanie o wartości zamiast znaku zapytania

log4j.logger.org.hibernate=INFO, hb 
log4j.logger.org.hibernate.SQL=DEBUG 
log4j.logger.org.hibernate.type=TRACE 
log4j.logger.org.hibernate.hql.ast.AST=info 
log4j.logger.org.hibernate.tool.hbm2ddl=warn 
log4j.logger.org.hibernate.hql=debug 
log4j.logger.org.hibernate.cache=info 
log4j.logger.org.hibernate.jdbc=debug 

log4j.appender.hb=org.apache.log4j.ConsoleAppender 
log4j.appender.hb.layout=org.apache.log4j.PatternLayout 
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n 
log4j.appender.hb.Threshold=TRACE 

Czy ktoś może mi pomóc w jaki sposób umieścić go w hibernate.cfg.xml pliku? Przykro mi, ale nie wiem, jak działa log4j. Tworzę to, aby wyświetlić zapytanie o hibernację z numerem value zamiast ?, ale wciąż wyświetla się ? nic się nie zmienia, więc co muszę zrobić dalej?

Wziąłem odniesienie stąd Hibernate show real SQL

+1

Nie musisz go uwzględniać. Umieść plik log4j.properties w ścieżce klas, a program hibernate automatycznie go pobierze. Upewnij się, że podałeś wymagane pliki jar. –

+0

Musiałem umieścić go w domyślnym folderze 'src' i jest on w' classpath', ale nie widziałem żadnego efektu. – commit

+0

Czy możesz upewnić się, że masz log4j.properties w ścieżce klas? Dla mnie działa. Poniżej znajduje się struktura mojego projektu src/main/java -> Klasy Java src/main/resources -> log4j.properties. Chociaż jest to maven struktura projektu.Używam normalnej kompilacji eclipse (Project -> build project) do budowania moich klas. –

Odpowiedz

13

do „show_sql” własność w hibernate.cfg.xml powoduje kwerendy mają być drukowane bezpośrednio do konsoli.

Log4j umożliwia rejestrowanie danych wyjściowych w dowolnym miejscu, od konsoli po plik, do portów sieciowych, do baz danych. Ale prosta konfiguracja, którą masz, ma również wydrukować na konsoli. Najpierw usuń właściwość show_sql, aby sprawdzić, czy Log4j w ogóle niczego nie umieszcza na konsoli.

Jeśli to nie działa, oznacza to, że Log4j nie jest poprawnie skonfigurowany. Jeśli używasz hibernacji> 3.5, używa apletu slf4j, który domyślnie używa logback zamiast log4j. Możesz łatwo przełączyć się na log4j, usuwając pliki jar (logback) ze ścieżki klasy i dodając zamiast nich slf4j-log4j12.jar i log4j.jar.

Śledzenie Log4j drukuje również zapytania za pomocą znaku "?", Ale drukuje również powiązania parametrów, tj. Czym jest znak "?". zostanie zastąpiony przez sterownik bazy danych lub serwer.

+0

Twoja odpowiedź wydaje się być właściwa, logback jest skonfigurowany w moim projekcie wcześniej i dlatego nie otrzymuje log4j, nie mogę go usunąć, więc potrzebuję znaleźć rozwiązanie w logbackach, dziękuję za zrozumienie mi, jaki był problem. Dzięki .. – commit

+1

@commit, jeśli chcesz użyć funkcji logback, upuść log4j-over-slf4j.jar w ścieżkę klasy i nie przejmuj się konfiguracją log4j. – Vadzim

+0

jesteś mężczyzną !! – OhadR

2

W większości przypadków powinno wystarczyć włączenie log4j.properties w ścieżce klas aplikacji.

Zobacz How to initialize log4j properly?.

Ten link już jest pod numerem suggests, że powinieneś poszukać powiązanych wartości parametrów sql nie w tekście sql przez osobne instrukcje dziennika, takie jak to: TRACE [BasicBinder] binding parameter [1] as [VARCHAR] - john doe.

Ale polecam trzymać się z log4jdbc. Jest bardzo prosty w użyciu. I jest w stanie wstawiać wartości parametrów zapytania w drukowanym tekście sql.

2

dodaj to również

<property name="show_sql">true</property> 
<property name="format_sql">true</property> 
<property name="use_sql_comments">true</property> 

Twój problem zostanie rozwiązany.

+0

'use_sql_comments' wyświetli komentarze SQL, nie rozwiąże mojego problemu. – commit

+2

Do właściwości non-XML: log4j.logger.org.hibernate.SQL = DEBUG log4j.logger.org.hibernate.TYPE = DEBUG log4j.logger.org.hibernate.USE_SQL_COMMENTS = DEBUG –

0

Nie można drukować wartości w linii. Hibernacja zawsze będzie drukować? podczas rejestrowania zapytań. Dane wyjściowe rejestrowania org.hibernate.type na poziomie DEBUG pokazują wartości i typy używane do zastąpienia tych znaków zapytania.

3

Zapoznaj hibernacji odniesienia jak na swój wersji. Oto 3,3 Link

Edycja: -

  1. W celu konfiguracji zalogowaniu trzeba będzie slf4j-api.jar w ścieżce klasy wraz z pliku jar w preferowanym wiązania - slf4j-log4j12.jar w przypadku Log4J.
  2. Umieść plik log4j.properties w ścieżce klas. Przykładowy plik właściwości jest rozpowszechniany z Hibernate w katalogu src /.
  3. Włącz następujące kategorie log 4j.

    org.hibernate.SQL Log all SQL DML statements as they are executed 
    
    org.hibernate.type Log all JDBC parameters 
    
+1

Mógłbyś rozwinąć swoją odpowiedź ? Linki z czasem stają się nieaktualne. – orique

0

W moim przypadku nie było hibernate.cfg.xml, to log4j.xml plik gdzie umieścić kod podany przez @jdev

< nazwa właściwości = "show_sql">true Wyświetla zapytania SQL

< nazwa property = "format_sql">prawda Format zapytania wyświetlane na konsoli

< nazwa property = "use_sql_comments">prawdziwymi komentarze zostaną dodane do zapytań

Jeśli Twój projekt ma 1000 zapytań drukowanych na konsoli, inne fałszywe: < nazwa właściwości = "Show_sql">prawda < nazwa property = "format_sql">fałszywe < name = "use_sql_comments własność">fałszywy

lub napisz appender do log4j.xml którą mam zrobione w moim projekcie, aby napisać wszystkie zapytania SQL w oddzielnym pliku tekstowym, który jest określony tutaj: Configuring Hibernate logging using Log4j XML config file?