Distriggerszione dell’uscita della console di registrazione di ibernazione

Sto usando Hibernate 3 e voglio impedirmi di scaricare tutti i messaggi di avvio sulla console. Ho provato a commentare le righe stdout in log4j.properties ma senza fortuna. Ho incollato il mio file di registro qui sotto. Inoltre sto usando eclipse con la struttura standard del progetto e ho una copia di log4j.properties sia nella root della cartella del progetto che nella cartella bin.

  ### messaggi di log diretti allo stdout ###
 # Log4j.appender.stdout = org.apache.log4j.ConsoleAppender
 # Log4j.appender.stdout.Target = System.out
 # Log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
 # log4j.appender.stdout.layout.ConversionPattern =% d {ABSOLUTE}% 5p% c {1}:% L -% m% n

 ### messaggi diretti al file hibernate.log ###
 log4j.appender.file = org.apache.log4j.FileAppender
 log4j.appender.file.File = hibernate.log
 log4j.appender.file.layout = org.apache.log4j.PatternLayout
 log4j.appender.file.layout.ConversionPattern =% d {ABSOLUTE}% 5p% c {1}:% L -% m% n

 ### imposta i livelli di log - per una registrazione più dettagliata cambia 'info' a 'debug' ###

 log4j.rootLogger = warn, stdout

 # Log4j.logger.org.hibernate = informazioni
 log4j.logger.org.hibernate = di debug

 ### log Attività del parser di query HQL
 # Log4j.logger.org.hibernate.hql.ast.AST = di debug

 ### registra solo l'SQL
 # Log4j.logger.org.hibernate.SQL = di debug

 ### log Parametri di bind JDBC ###
 log4j.logger.org.hibernate.type = informazioni
 # Log4j.logger.org.hibernate.type = di debug

 ### log schema export / update ###
 log4j.logger.org.hibernate.tool.hbm2ddl = di debug

 ### log alberi di analisi HQL
 # Log4j.logger.org.hibernate.hql = di debug

 ### attività cache del registro ###
 # Log4j.logger.org.hibernate.cache = di debug

 ### registra l'attività di transazione
 # Log4j.logger.org.hibernate.transaction = di debug

 ### registra l'acquisizione di risorse JDBC
 # Log4j.logger.org.hibernate.jdbc = di debug

 ### abilitare la seguente riga se si desidera rintracciare la connessione ###
 ### perdite durante l'utilizzo di DriverManagerConnectionProvider ###
 # Log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider = trac5 

Cerca di impostare un livello di registrazione più ragionevole. L’impostazione del livello di registrazione su info significa che vengono registrati solo gli eventi di registro a livello di info o superiori ( warn , error e fatal ), ovvero gli eventi di registrazione di debug vengono ignorati.

 log4j.logger.org.hibernate=info 

o nella versione XML del file di configurazione log4j:

    

Vedi anche il manuale log4j .

Avviso importante: la proprietà (parte della configurazione di ibernazione, NON parte della configurazione del logging!)

 hibernate.show_sql 

controlla la registrazione direttamente su STDOUT ignorando qualsiasi framework di registrazione (che è ansible riconoscere dalla mancata formattazione dell’output dei messaggi). Se si utilizza un framework di registrazione come log4j, è necessario impostare sempre tale proprietà su false perché non offre alcun vantaggio.

Quella circostanza mi ha irritato abbastanza a lungo perché non mi è mai interessato veramente fino a quando non ho provato a scrivere un punto di riferimento riguardo ad Hibernate.

Esecuzione:

 java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.OFF); 

prima che l’inizializzazione di Hibernate funzionasse per me.

Nota: la riga sopra disattiverà ogni registrazione ( Level.OFF ). Se vuoi essere meno severo, puoi usare

 java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE); 

è abbastanza silenzioso. (Oppure controlla la class java.util.logging.Level per più livelli).

Puoi disabilitare le molte uscite di ibernazione impostando questo object di ibernazione (configurazione hb) un falso:

 hibernate.show_sql hibernate.generate_statistics hibernate.use_sql_comments 

Ma se vuoi disabilitare tutte le informazioni della console, devi impostare il livello di logger come NESSUNA FATAL della class org.hibernate come dice Juha.

Finalmente ho capito, è perché Hibernate sta usando la facciata di log slf4j ora, per collegarsi a log4j, devi mettere log4j e slf4j-log4j12 jars sulla tua lib e quindi le proprietà di log4j prenderanno il controllo dei registri di Hibernate.

Le mie impostazioni pom.xml sono le seguenti:

   log4j log4j 1.2.16   org.slf4j slf4j-log4j12 1.6.4  

Per disabilitare Hibernate:select messaggio nel registro, è ansible impostare la proprietà in HibernateJpaVendorAdapter :

    

Per coloro che non vogliono soluzioni eleganti, solo un modo veloce e sporco per bloccare quei messaggi, ecco una soluzione che ha funzionato per me (utilizzo Hibernate 4.3.6 ed Eclipse e nessuna risposta fornita sopra (o trovata su Internet) ha funzionato, né i file di configurazione di log4j né l’impostazione del livello di registrazione in modo programmatico)

 public static void main(String[] args) { //magical - do not touch @SuppressWarnings("unused") org.jboss.logging.Logger logger = org.jboss.logging.Logger.getLogger("org.hibernate"); java.util.logging.Logger.getLogger("org.hibernate").setLevel(java.util.logging.Level.WARNING); //or whatever level you need ... } 

L’ho usato in un programma tutorial scaricato da questo sito

Prova a liberarti dell’output del logger in console.

 ch.qos.logback.classic.LoggerContext.LoggerContext loggerContext = (LoggerContext) org.slf4j.LoggerFactory.LoggerFactory.getILoggerFactory(); loggerContext.stop(); 

Queste istruzioni disabilitano tutte le uscite della console dal registratore.

La prima cosa da fare è capire quale framework di registrazione è effettivamente utilizzato.

Molti quadri sono già coperti da altri autori sopra. Nel caso in cui si utilizzi Logback, è ansible risolvere il problema aggiungendo questo logback.xml al classpath:

     

Ulteriori informazioni: Logback Manual-Configuration

Ho cambiato il “debug” in “info” e ha funzionato. Ecco cosa ho fatto:

Prima:

 log4j.rootLogger=debug, stdout, R 

Dopo:

 log4j.rootLogger=info, stdout, R 

Sostituire slf4j-jdk14-xxx.jar con slf4j-log4j12-xxx.jar. Se si dispone di entrambi, eliminare slf4j-jdk14-xxx.jar. Ho trovato questa soluzione su https://forum.hibernate.org/viewtopic.php?f=1&t=999623