2013-09-05 11 views
16

ho Crearte log4j.properties file, come di seguito:file include proprietà log4j in ibernazione per mostrare query con valore invece del punto interrogativo

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 

qualcuno può aiutarmi a come includerlo nel hibernate.cfg.xml di file? Mi dispiace davvero di non sapere come funziona log4j. Creo questo per visualizzare la mia query di ibernazione con value anziché ? ma continua a visualizzare ? non cambia nulla, quindi cosa devo procedere ulteriormente?

ho preso riferimento da qui Hibernate show real SQL

+1

Non è necessario includerlo. Inserisci il file log4j.properties in classpath e hibernate lo rileverà automaticamente. Assicurati di fornire i file jar richiesti. –

+0

L'ho messo nella cartella predefinita 'src' e si trova in' classpath', ma non ho visto alcun effetto. – commit

+0

Puoi assicurarti di avere log4j.properties in classpath? Per me funziona.Below è la mia struttura di progetto src/main/java -> classi Java src/main/resources -> log4j.properties. Anche se questa è la struttura del progetto maven.Sto usando la normale build di eclipse (Project -> build project) per creare le mie classi –

risposta

13

La proprietà 'show_sql' nel vostro hibernate.cfg.xml fa sì che le query da stampare direttamente alla console.

Log4j consente di registrare l'output ovunque, dalla console al file, alle porte di rete, ai database. Ma la semplice configurazione che si deve stampare sulla console. Quindi prima rimuovi la proprietà show_sql per vedere se Log4j mette qualcosa sulla console.

Se questo non funziona, mostra che Log4j non è configurato correttamente. Se stai utilizzando la modalità di ibernazione> 3.5, utilizza la slf4j api, che usa logback di default invece di log4j. È possibile passare facilmente a log4j rimuovendo i jar di logback dal classpath e aggiungendo invece slf4j-log4j12.jar e log4j.jar.

Il tracciato Log4j stampa anche le query utilizzando '?', Ma stampa anche i collegamenti dei parametri, cioè quale '?' verrà sostituito dal driver o dal server del database.

+0

La tua risposta sembra essere corretta, il logback è già configurato nel mio progetto ed è per questo che non sta ottenendo log4j, non posso rimuoverlo quindi ho bisogno di trovare una soluzione nel logback, grazie per avermi capito quale fosse il problema. Grazie .. – commit

+1

@commit, se si desidera utilizzare il logback, basta trascinare log4j-over-slf4j.jar in classpath e non preoccuparsi affatto della configurazione di log4j. – Vadzim

+0

tu sei l'uomo !! – OhadR

2

Nella maggior parte dei casi dovrebbe essere sufficiente includere log4j.properties nel classpath dell'applicazione.

Vedere How to initialize log4j properly?.

il collegamento in questione già suggests che si dovrebbe cercare valori param legato SQL non nel testo SQL nel bilancio separato di registro come questo: TRACE [BasicBinder] binding parameter [1] as [VARCHAR] - john doe.

Ma mi raccomando di rimanere con log4jdbc. È abbastanza semplice da usare. Ed è in grado di incorporare valori param di query nel testo sql stampato.

2

Aggiungere questo anche

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

il vostro problema sarà risolto.

+0

'use_sql_comments' mostrerà solo i commenti sql, non risolve il mio problema. – commit

+2

Per le proprietà non XML: log4j.logger.org.hibernate.SQL = DEBUG log4j.logger.org.hibernate.TYPE = DEBUG log4j.logger.org.hibernate.USE_SQL_COMMENTS = DEBUG –

0

Non è possibile stampare i valori in linea. Hibernate stamperà sempre il? quando si registrano le query. L'output della registrazione org.hibernate.type al livello DEBUG mostra i valori e i tipi utilizzati per sostituire tali punti interrogativi.

3

prega di fare riferimento di riferimento di sospensione secondo la vostra versione. Ecco 3.3 Link

Edit: -

  1. Al fine di impostare la registrazione è necessario slf4j-api.jar nel classpath insieme al file jar per il vostro preferito vincolante - slf4j-log4j12.jar nel caso di Log4J.
  2. Inserire il file log4j.properties nel classpath. Un file di proprietà di esempio viene distribuito con Hibernate nella directory src /.
  3. Abilita le seguenti categorie log 4j.

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

Potresti ampliare la tua risposta ? I collegamenti tendono a diventare stantii nel tempo. – orique

0

Nel mio caso non è stato hibernate.cfg.xml, era log4j.xml file in cui ho messo il codice data dal @jdev

< nome proprietà = "show_sql">true Mostra query SQL

< property name = "format_sql">vero formato la query mostrata su console

< property name = "use_sql_comments">veri commenti verrà aggiunto alla query

Se il progetto prevede la stampa di migliaia di query sulla console, rendere false altre: < nome proprietà = "Show_sql">vero < property name = "format_sql">falsi < property name = "use_sql_comments">falsa

o scrivere un appender al log4j.xml cui ho fatto nel mio progetto, solo per scrivere tutte le query SQL su un file di testo separato che è specificato qui: Configuring Hibernate logging using Log4j XML config file?