Pregunta

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 512 mensajes anteriores en un archivo. Lo he configurado con éxito, y lo es. funcionando bien.Registra los mensajes en un archivo cuando ocurre algún error fatal.

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

¿Hay alguna forma de desactivar este registro?Necesito mis registros solo en un archivo, también cuando ocurre algún 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í 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));

Lenguaje - C#, .NET Framework - 3.5, Visual Studio 2008, Log4net 1.2.10, Tipo de proyecto - WinForms

¿Fue útil?

Solución

Eliminar el ConfiguradorBásico.Configurar() línea.Eso es lo que hace esa línea: agrega un ConsoleAppender que apunta a Console.Out.

Otros consejos

¿Sigues viendo 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, entonces esos mensajes no deberían aparecer en el modo de publicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top