2009-09-23 18 views
48

que tiene un archivo app.config vacío, pero aún así obtener los registros de depuración NHibernateNHibernate

NHibernate: SELECT this_.LogID as LogID71_0_, this_.Level as Level71_0_, this_.Message as Message71_0_, this_.EventTime as EventTime71_0_, this_.Component as ... 

He intentado añadir una configuración de log4net con un nivel de registro de errores, pero no sirve. ¿Cómo puedo detener estos mensajes de registro?

Lo que me deja perplejo es por qué aparecen en primer lugar si tengo una aplicación vacía. Estoy de acuerdo. No tiene sentido para mí que tenga que configurarlo para que no se impriman estos mensajes; el valor predeterminado debe estar desactivado. ¿Podría ser que mi código los esté configurando programáticamente de alguna manera? ¿Que debería buscar?

+0

Como podemos ver, real asnwer es la configuración de log4net –

+1

en realidad, es el showsql en nHibernate .... – Dani

Respuesta

80

Configure Log4Net for use with NHibernate puede ser útil.

Es necesario tener estos dos registradores:

<logger name="NHibernate"> 
    <level value="ERROR" /> 
</logger> 

<logger name="NHibernate.SQL"> 
    <level value="ERROR" /> 
</logger> 
+1

No funciona, vea la pregunta actualizada (agregué la sección apropiada de configuración de log4net, sin efecto). – ripper234

+3

log4net en realidad coincide con nombres de registradores que comienzan con el nombre especificado, por lo que poner "NHibernate" filtrará cada mensaje de NHibernate. –

+0

Creo que el comentario de @Ripper es incorrecto, esto funciona para mí y también con ActiveRecord –

1

¿Quieres desactivar el registro en el nivel NHibernate o el nivel Log4net?

Estoy haciendo lo primero al establecer la variable "show_sql" en falso. Estoy haciendo esto programáticamente en C# en este momento, pero supongo que esto también sería fácil de poner en un archivo de configuración XML.

+0

No funciona (http://www.beansoftware.com/asp.net-tutorials/nhibernate-log4net.aspx). ¿Por qué el valor predeterminado debe mostrar el SQL? ¿Podría ser mi código de alguna manera enciende esto pragmáticamente? – ripper234

+0

Acabo de revisar mi código. Lo apagué comentando show_sql = true. No importa. Lo siento. –

+0

Gracias funcionó para mí. – Jonathan

0

¿Está utilizando NUnit 2.4.6? Leo ayer this publicación de blog que dice que esta versión de NUnit establece log4net para usar el registro de nivel de DEPURACIÓN, efectuando NHibernate también.

si no es NUnit y no es usted, me gustaría comprobar si se trata de otra biblioteca de terceros que está utilizando.

EDITAR

Pensándolo bien, no creo que la salida tenga algo que ver con log4net. el formato se parece más a la salida controlada "show_sql". Verificaría dos cosas: 1. Si el correcto (el que tiene el show_sql = falso) hibernate.config se copia en su directorio de ejecución. 2. Si la propiedad de configuración show_sql no se reemplaza manualmente en su código.

6

El problema estaba en algún lugar de "mi código". Construimos la configuración de NHibernate manualmente (configurando el indicador show_sql en verdadero).

12
return Fluently.Configure() 
      .Database(MsSqlConfiguration.MsSql2005.ConnectionString(
       c => c.FromConnectionStringWithKey("MyDB")).ShowSql()) 

Extracción de la .ShowSql() trabajó para mí

+0

Esto resolvió mi problema, ¡gracias! –

+0

Pero, ¿y si quiero ver SQL, pero no en la consola? –

2

Para mí fue el problema NUnit. El registro adicional ocurría al ejecutar las pruebas en TeamCity que debe haber estado usando una versión diferente de nunit registros

2

la NHibernate no me ayudan mucho ... me gustan estos ajustes mejor:

<logger name="NHibernate"> 
     <level value="OFF" /> 
    </logger> 

    <logger name="NHibernate.SQL"> 
     <level value="OFF" /> 
    </logger>