Desactivar la salida de la consola de registro de hibernación


84

Estoy usando hibernate 3 y quiero evitar que descargue todos los mensajes de inicio en la consola. Intenté comentar las líneas stdout en log4j.properties pero no tuve suerte. He pegado mi archivo de registro a continuación. También estoy usando eclipse con la estructura de proyecto estándar y tengo una copia de log4j.properties tanto en la raíz de la carpeta del proyecto como en la carpeta bin.

### mensajes de registro directos a 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

### mensajes directos al archivo 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

### establecer niveles de registro: para un registro más detallado, cambie 'info' a 'depurar' ###

log4j.rootLogger = advertir, stdout

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

### registrar la actividad del analizador de consultas HQL
# log4j.logger.org.hibernate.hql.ast.AST = debug

### registra solo el SQL
# log4j.logger.org.hibernate.SQL = depurar

### registrar parámetros de vinculación JDBC ###
log4j.logger.org.hibernate.type = info
# log4j.logger.org.hibernate.type = debug

### Exportación / actualización del esquema de registro ###
log4j.logger.org.hibernate.tool.hbm2ddl = depurar

### log árboles de análisis HQL
# log4j.logger.org.hibernate.hql = debug

### registro de actividad de caché ###
# log4j.logger.org.hibernate.cache = depurar

### registrar actividad de transacciones
# log4j.logger.org.hibernate.transaction = debug

### registro de adquisición de recursos JDBC
# log4j.logger.org.hibernate.jdbc = depurar

### habilita la siguiente línea si quieres rastrear la conexión ###
### fugas al usar DriverManagerConnectionProvider ###
# log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider = trac5

2
Vale la pena mencionar que Hibernate 4+ usa el registro JBOSS.
Ojo

Respuestas:


77

Intente establecer un nivel de registro más razonable. Establecer el nivel de registro en infosignifica que solo se registran los eventos de registro en infoun nivel superior ( warn, errory fatal), es decir debug, se ignoran los eventos de registro.

log4j.logger.org.hibernate=info

o en la versión XML del archivo de configuración log4j:

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

Consulte también el manual de log4j .


1
¿Cómo se hace esto en la versión XML?
James McMahon

Puede aplicar esto a todos los paquetes en org.hibernate haciendo lo anterior, o si desea diferentes niveles para diferentes paquetes dentro de hibernate, puede especificar esos paquetes de la misma manera.
Matthew Brubaker

3
Esto parece lógico, pero todavía no me funciona (Spring 3.0.5, Hibernate 3.5.6, sf4j-log4j bridge). Todavía recibo alrededor de 100 líneas de comentarios 'INFO' sobre el inicio de Hibernate cada vez. Entonces, esto podría no funcionar para todos.
Joseph Lust

1
@Twisted Pear: establezca su nivel de registro en WARN. Entonces no recibirás mensajes INFO.
Juha Syrjälä

5
Seguimiento, ya que esto nunca se resolvió adecuadamente: Hibernate, incluso en 4.3.0.Final, tiene muchas System.out.println()llamadas codificadas .
chrylis -cautelyoptimistic-

85

Aviso importante: la propiedad (¡parte de la configuración de hibernación, NO parte de la configuración del marco de registro!)

hibernate.show_sql

controla el registro directamente en STDOUT sin pasar por cualquier marco de registro (que puede reconocer por el formato de salida faltante de los mensajes). Si usa un marco de registro como log4j, siempre debe establecer esa propiedad en falso porque no le brinda ningún beneficio.

Esa circunstancia me irritó durante bastante tiempo porque nunca me preocupé realmente hasta que traté de escribir un punto de referencia sobre Hibernate.


2
Tuve que establecer esta propiedad en mi hibernate.xmlconfiguración de Hibernate (es decir, ), a diferencia de mi configuración de registro. ¡Gracias por la anotación!
JJ Zabkar

¿Hay alguna manera de tener este registro para no pasar por alto mi marco de registro, sino para usarlo realmente? Veo algunas excepciones enviadas a la salida estándar que me gustaría registrar.
Legna

1
Con mi proyecto de arranque de Spring agregué esto en un archivo de configuración YML de perfil. Pero no funcionó, al igual que las otras publicaciones en este hilo ... Los registros de Hibernate se siguen escribiendo sin importar lo que especifique. ¿Se puede manejar en otro lugar que no sea la configuración de Logback, el archivo yaml de la aplicación y pom.xml?
Alex

33

Ejecutando:

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

antes de que la inicialización de hibernate funcionara para mí.


Nota: la línea de arriba desactivará todos los registros ( Level.OFF). Si quieres ser menos estricto, puedes usar

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

eso es lo suficientemente silencioso. (O consulte la java.util.logging.Levelclase para más niveles).


1
Esto funcionó para mí:java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);
RafiAlhamd

16

Puede deshabilitar muchas de las salidas de hibernación configurando estos accesorios de hibernación (configuración de hb) en falso:

hibernate.show_sql
hibernate.generate_statistics
hibernate.use_sql_comments

Pero si desea deshabilitar toda la información de la consola, debe establecer el nivel del registrador en NINGUNO de FATAL de clase org.hibernatecomo dice Juha.


¿Qué pasa si quiero generar estadísticas, pero no registrar?
markthegrea

7

Finalmente me di cuenta, es porque Hibernate está usando la fachada de registro slf4j ahora, para hacer un puente a log4j, necesitas poner log4j y slf4j-log4j12 jar en tu lib y luego las propiedades de log4j tomarán el control de los registros de Hibernate.

Mi configuración de pom.xml se ve a continuación:

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

En realidad, puede hacer que Hibernate use slf4j explícitamente agregando -Dorg.jboss.logging.provider=slf4jopciones a su VM. Escribí un artículo sobre el tema: medium.com/@scadge/how-to-enable-hibernate-logging-dc11545efd3d
Scadge

5

Para deshabilitar el Hibernate:selectmensaje en el registro, es posible establecer la propiedad en HibernateJpaVendorAdapter:

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

4

Para aquellos que no quieren soluciones elegantes, solo una forma rápida y sucia de detener esos mensajes, aquí hay una solución que funcionó para mí (uso Hibernate 4.3.6 y Eclipse y no se proporcionan respuestas arriba (o se encuentran en Internet) funcionó; ni los archivos de configuración log4j ni la configuración del nivel de registro mediante programación)

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

    ...
}

Lo usé en un programa tutorial descargado de este sitio.


3

Lo primero que debe hacer es averiguar qué marco de registro se utiliza realmente.

Muchos marcos ya están cubiertos por otros autores anteriormente. En caso de que esté utilizando Logback, puede resolver el problema agregando este logback.xml a su classpath:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <logger name="org.hibernate" level="WARN"/>
</configuration>

Más información: Logback Manual-Configuration


1

Cambié la "depuración" a "información" y funcionó. Aquí esta lo que hice:

Antes de:

log4j.rootLogger=debug, stdout, R

Después:

log4j.rootLogger=info, stdout, R 


0

Para deshacerse de la salida del registrador en la consola, intente esto.

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

loggerContext.stop();

Estas declaraciones deshabilitaron todas las salidas de la consola del registrador.


0

Hay varias partes del registro de hibernación que puede controlar según la jerarquía del registrador del paquete de hibernación (más información sobre la jerarquía del registrador aquí ).

    <!-- Log everything in hibernate -->
    <Logger name="org.hibernate" level="info" additivity="false">
      <AppenderRef ref="Console" />
    </Logger>

    <!-- Log SQL statements -->
    <Logger name="org.hibernate.SQL" level="debug" additivity="false">
      <AppenderRef ref="Console" />
      <AppenderRef ref="File" />
    </Logger>

    <!-- Log JDBC bind parameters -->
    <Logger name="org.hibernate.type.descriptor.sql" level="trace" additivity="false">
      <AppenderRef ref="Console" />
      <AppenderRef ref="File" />
    </Logger>

Lo anterior fue tomado de aquí .

Además, podría tener la propiedad show-sql:trueen su archivo de configuración, ya que reemplaza la configuración del marco de registro. Más sobre eso aquí .


0

Me las arreglé para detenerme agregando esas 2 líneas

log4j.logger.org.hibernate.orm.deprecation=error

log4j.logger.org.hibernate=error

A continuación se muestra cómo se ve mi log4j.properties , solo dejo algunas líneas comentadas que explican el nivel de registro

# Root logger option
#Level/rules TRACE < DEBUG < INFO < WARN < ERROR < FATAL.
#FATAL: shows messages at a FATAL level only
#ERROR: Shows messages classified as ERROR and FATAL
#WARNING: Shows messages classified as WARNING, ERROR, and FATAL
#INFO: Shows messages classified as INFO, WARNING, ERROR, and FATAL
#DEBUG: Shows messages classified as DEBUG, INFO, WARNING, ERROR, and FATAL
#TRACE : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL
#ALL : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL
#OFF : No log messages display


log4j.rootLogger=INFO, file, console

log4j.logger.main=DEBUG
log4j.logger.org.hibernate.orm.deprecation=error
log4j.logger.org.hibernate=error

#######################################
# Direct log messages to a log file
log4j.appender.file.Threshold=ALL
log4j.appender.file.file=logs/MyProgram.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c{1} - %m%n

# set file size limit
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=50


#############################################
# Direct log messages to System Out
log4j.appender.console.Threshold=INFO
log4j.appender.console.Target=System.out
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c{1} - %m%n
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.