2008-09-24 23 views
7

Estoy usando log4net en un proyecto C#, en el entorno de producción, quiero deshabilitar todo el registro, pero cuando se produce un error fatal debe registrar todos los mensajes 512 anteriores en un archivo. He configurado esto con éxito, y está funcionando bien. Registra los mensajes en un archivo cuando se produce un error fatal.Log4Net/C# - Deshabilitar el registro predeterminado

Pero cuando lo ejecuto desde Visual Studio, puedo ver que todos los mensajes de registro se escriben en la ventana de resultados, independientemente de si es fatal o no. (No puedo ver estos mensajes cuando corro desde el Explorador de Windows - mi aplicación es un exe WinForm y no hay ventana de Consola para ver la salida)

¿Hay alguna forma de desactivar este registro? Necesito mis registros solo en archivos, eso también cuando se produce un error fatal.

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <log4net debug="false"> 

     <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
      <file value="log.txt" /> 
      <appendToFile value="true" /> 
      <rollingStyle value="Size" /> 
      <maxSizeRollBackups value="10" /> 
      <maximumFileSize value="1MB" /> 
      <staticLogFileName value="true" /> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
      </layout> 
     </appender> 

     <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" > 
      <bufferSize value="512" /> 
      <lossy value="true" /> 
      <evaluator type="log4net.Core.LevelEvaluator"> 
       <threshold value="FATAL"/> 
      </evaluator> 
      <appender-ref ref="RollingFileAppender" /> 
     </appender> 

     <root> 
      <level value="DEBUG" /> 
      <appender-ref ref="BufferingForwardingAppender" />   
     </root> 
    </log4net> 
</configuration> 

Y así es como lo configuro en el inicializador estático de Windows Forms.

static Window1() 
    { 
     Stream vStream = typeof(Window1).Assembly.GetManifestResourceStream("TestLogNet.log4net.config"); 
     XmlConfigurator.Configure(vStream); 
     BasicConfigurator.Configure(); 
    } 

Y tengo el objeto registrador inicializado en el constructor de WinForm

logger = LogManager.GetLogger(typeof(Window1)); 

[idioma - C#, .NET Framework - 3,5, Visual Studio 2008, log4net 1.2.10, tipo de proyecto - WinForms]

+0

¿Importa que todo salga a la consola? Seguramente ya que no hay consola o su aplicación de winforms, ¿solo está iniciando sesión como lo desea? –

+2

Importa para el rendimiento, ya que todas las llamadas de la consola están sincronizadas. Si tienes un montón de hilos de fondo haciendo logging, sufrirán mucho. –

+0

+1 para los detalles completos sobre el problema (hay demasiadas preguntas que se pueden reanudar para "ayudar, no está funcionando") – alexandrul

Respuesta

0

¿Todavía ve los mensajes en Visual Studio si la aplicación está compilada en modo de lanzamiento? Es posible que log4net use Debug.Write para mostrar los errores de todos modos. Si ese es el caso, esos mensajes no deberían aparecer en el modo de lanzamiento.

Cuestiones relacionadas