96 votes

Désactiver la journalisation de la sortie de la console en mode hibernation

J'utilise hibernate 3 et je veux l'empêcher de déverser tous les messages de démarrage sur la console. J'ai essayé de commenter les lignes stdout dans log4j.properties mais sans succès. J'ai collé mon fichier journal ci-dessous. J'utilise eclipse avec la structure de projet standard et j'ai une copie de log4j.properties à la fois dans la racine du dossier du projet et dans le dossier bin.

\### 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

112voto

user1050755 Points 1165

Remarque importante : la propriété (qui fait partie de la configuration d'hibernate, PAS de la configuration du cadre de journalisation !)

hibernate.show_sql

contrôle la journalisation directement vers STDOUT en contournant tout cadre de journalisation (ce que vous pouvez reconnaître au formatage de sortie manquant des messages). Si vous utilisez un cadre de journalisation comme log4j, vous devriez siempre mettre cette propriété à "false" (faux) parce qu'il ne vous apporte aucun avantage.

Cette circonstance m'a longtemps irrité car je ne m'y étais jamais vraiment intéressé jusqu'à ce que j'essaie d'écrire un benchmark concernant Hibernate.

88voto

Juha Syrjälä Points 11475

Essayez de définir un niveau de journalisation plus raisonnable. En réglant le niveau de journalisation sur info signifie que seul l'événement du journal à info ou d'un niveau supérieur ( warn , error y fatal ) sont enregistrées, c'est-à-dire debug sont ignorés.

log4j.logger.org.hibernate=info

ou en Version XML du fichier de configuration de log4j :

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

Voir aussi manuel log4j .

38voto

acdcjunior Points 19898

Exécution :

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

avant l'initialisation d'hibernate a fonctionné pour moi.

Remarque : la ligne ci-dessus deviendra cada la déconnexion ( Level.OFF ). Si vous voulez être moins strict, vous pouvez utiliser

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

c'est assez silencieux. (Ou vérifiez le java.util.logging.Level pour plus de niveaux).

17voto

Philip Points 11

Vous pouvez désactiver la plupart des sorties d'hibernation en donnant à cet accessoire d'hibernation (configuration hb) la valeur false :

hibernate.show_sql
hibernate.generate_statistics
hibernate.use_sql_comments

Mais si vous voulez désactiver toutes les informations de la console, vous devez définir le niveau du logger à NONE ou FATAL de la classe org.hibernate comme le dit Juha.

7voto

Liqun Chen Points 21

J'ai finalement trouvé, c'est parce que Hibernate utilise maintenant la façade de log slf4j, pour faire le pont avec log4j, vous devez mettre les jars log4j et slf4j-log4j12 dans votre lib et alors les propriétés log4j prendront le contrôle des logs d'Hibernate.

Mon fichier pom.xml se présente comme suit :

    <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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X