2008-11-22 9 views
62

Ich verwende Hibernate 3 und möchte verhindern, dass alle Startmeldungen an die Konsole gesendet werden. Ich habe versucht, die stdout Zeilen in log4j.properties zu kommentieren, aber kein Glück. Ich habe meine Protokolldatei unten eingefügt. Außerdem verwende ich Eclipse mit der Standardprojektstruktur und habe eine Kopie von log4j.properties sowohl im Stamm des Projektordners als auch im bin-Ordner.Ausschalten der Hibernate-Logging-Konsole

### direct log messages to 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 

### direct messages to 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 

### set log levels - for more verbose logging change 'info' to 'debug' ### 

log4j.rootLogger=warn, stdout 

#log4j.logger.org.hibernate=info 
log4j.logger.org.hibernate=debug 

### log HQL query parser activity 
#log4j.logger.org.hibernate.hql.ast.AST=debug 

### log just the SQL 
#log4j.logger.org.hibernate.SQL=debug 

### log JDBC bind parameters ### 
log4j.logger.org.hibernate.type=info 
#log4j.logger.org.hibernate.type=debug 

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

### log HQL parse trees 
#log4j.logger.org.hibernate.hql=debug 

### log cache activity ### 
#log4j.logger.org.hibernate.cache=debug 

### log transaction activity 
#log4j.logger.org.hibernate.transaction=debug 

### log JDBC resource acquisition 
#log4j.logger.org.hibernate.jdbc=debug 

### enable the following line if you want to track down connection ### 
### leakages when using DriverManagerConnectionProvider ### 
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trac5
+2

Erwähnenswert, dass Hibernate 4+ JBOSS Protokollierung verwendet. – Eye

Antwort

67

Versuchen Sie, eine vernünftigere Protokollierungsstufe festzulegen. Die Einstellung der Protokollierungsstufe auf info bedeutet, dass nur Protokollereignisse bei info oder einer höheren Ebene (warn, error und fatal) protokolliert werden, dh debug Protokollierungsereignisse werden ignoriert.

log4j.logger.org.hibernate=info 

oder in XML version von log4j Konfigurationsdatei:

<logger name="org.hibernate"> 
    <level value="info"/> 
</logger> 

Siehe auch log4j manual.

hibernate.show_sql 
hibernate.generate_statistics 
hibernate.use_sql_comments 

Aber wenn Sie alle Konsolen Infos deaktivieren möchten, müssen Sie den Logger Ebene ein setzen:

+1

Wie machst du das in der XML-Version? –

+1

XML-Version hinzugefügt –

+0

Sie können dies auf alle Pakete in org.hibernate durch die oben genannten anwenden, oder wenn Sie verschiedene Ebenen für verschiedene Pakete im Ruhezustand möchten, können Sie diese Pakete auf die gleiche Weise angeben. –

13

Sie können die viele der Ausgänge von Hibernate Einstellung dieses Requisiten von Hibernate (hb-Konfiguration) ein falscher deaktiviert KEINE von FATAL der Klasse org.hibernate wie Juha sagen.

+0

Was ist, wenn ich Statistiken erstellen, aber nicht loggen möchte? – markthegrea

0

Ich habe das "Debug" in "Info" geändert und es hat funktioniert. Hier ist, was ich getan habe:

Vorher:

log4j.rootLogger=debug, stdout, R 

Nach:

log4j.rootLogger=info, stdout, R 
4

ich endlich herausgefunden, dann ist es, weil die Hibernate verwendet jetzt slf4j log Fassade, an log4j zu überbrücken, Sie Sie müssen log4j und slf4j-log4j12 jars zu Ihrer lib hinzufügen und dann werden die log4j-Eigenschaften die Kontrolle über den Ruhezustand übernehmen.

Meine pom.xml Einstellung sieht wie folgt:

<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.6.4</version> 
    </dependency> 
4

Für Hibernate:select Nachricht in Protokoll deaktivieren, es möglich ist, die Eigenschaft in HibernateJpaVendorAdapter einzustellen:

<bean id="jpaVendorAdapter" 
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
    <property name="showSql" value="false"/> 
</bean> 
22

Executing:

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

vor der Hibernate Initialisierung für mich gearbeitet.


Hinweis: die obige Zeile schaltet jeder sich abzumelden (Level.OFF). Wenn Sie weniger streng sein wollen, können Sie

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

verwenden, die still genug ist. (Oder überprüfen Sie die Klasse für mehr Ebenen).

+1

Oh mein Gott! Die einzige Lösung funktionierte für mich. Danke mein Herr. Du hast Stunden oder Tage in meinem Leben gerettet. –

+0

Große Antwort, danke. –

52

Wichtiger Hinweis: Die Eigenschaft (Teil der Hibernate-Konfiguration, die nicht Teil der Logging-Framework Config!)

hibernate.show_sql 

steuert die Protokollierung direkt zu STDOUT jede Logging-Framework unter Umgehung (die Sie durch die fehlende erkennen können Ausgabe Formatierung der Nachrichten). Wenn Sie eine Logging-Framework wie log4j verwenden, Sie soll immer Satz, dass Eigenschaft auf false, weil es Ihnen keinen Nutzen überhaupt gibt.

Dieser Umstand irritiert mich eine ziemlich lange Zeit, weil ich nie wirklich darüber versorgt, bis ich einige Benchmark in Bezug auf Hibernate zu schreiben versucht.

+1

Ich musste diese Eigenschaft in meiner Hibernate (d. H. 'Hibernate.xml') Konfiguration setzen, im Gegensatz zu meiner Protokollierungskonfiguration. Danke für den Zeiger! –

+0

gibt es eine Möglichkeit, diese Protokollierung nicht umgangen werden, übergeben Sie meine Protokollierung Framework, aber um es tatsächlich zu verwenden? Ich sehe einige Ausnahmen, die an die stdout gesendet werden, die ich gerne protokollieren würde. – Legna

+1

Mit meinem Spring-Boot-Projekt habe ich dies in einer Profil-YML-Conf-Datei hinzugefügt. Aber es hat nicht funktioniert, genau wie die anderen Beiträge in diesem Thread ... Hibernate-Logs werden weiterhin geschrieben, egal was ich spezifiziere. Kann es anderswo als die Logback-Konfiguration, die Anwendungs-YAML-Datei und die POM.XML behandelt werden? – Alex

1

Für diejenigen, die nicht elegante Lösungen, nur eine schnelle und schmutzige Möglichkeit, diese Nachrichten zu stoppen wollen, hier ist eine Lösung, die für mich funktioniert (Ich benutze Hibernate 4.3.6 und Eclipse und keine Antworten oben bereitgestellt (oder gefunden im Internet) gearbeitet, weder log4j Konfigurationsdateien noch die Protokollierungsebene programmatisch) Einstellung

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 

    ... 
} 

ich benutzen es in einem Tutorial Programm heruntergeladen von this site

1

Um dies zu der Logger Ausgabe in Konsole versuchen loszuwerden.

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

loggerContext.stop(); 

Diese Anweisungen haben alle Konsolenausgaben des Loggers deaktiviert.