visual txt studio structured net log crear application c# .net visual-studio-2010 logging log4net

c# - txt - log4net structured logging



Log4Net-Cómo agregar un segundo registrador usado solo para secciones específicas de código (1)

Puede crear fácilmente un registrador especial como este:

ILog specialLogger = LogManager.GetLogger("SpecialLogger");

A continuación, puede configurar el sistema para usar un appender dedicado para este registrador:

<logger name="SpecialLogger" additivity="false"> <level value="ALL" /> <appender-ref ref="SpecialLogFileAppender" /> </logger> <root> <level value="ALL" /> <appender-ref ref="LogFileAppender" /> </root>

Estoy usando Log4Net 2.0, lo tengo funcionando como se requiere pero para agregar otro registrador para declaraciones de registro específicas. Todo el registro se hace a un único apéndice de archivo. El cambio que quiero hacer es que una aplicación de terceros dispare eventos que contengan información de depuración / error, puedo captar esta información y, aunque útil, creo que contamina el archivo de registro de la aplicación normal, y preferiría que se almacenara en su propio registro archivo.

El resultado final que me gustaría es un archivo llamado log-file.txt con todo el registro de la aplicación, excepto el registro de terceros. Y un segundo archivo llamado log-file-3rdparty.txt con registro solo desde la aplicación de terceros. El problema que tengo es configurar Log4Net para tener 2 registradores separados. Ya he intentado crear un 2nd LogFileAppender y agregarlo a la raíz; sin embargo, todo esto lo hace en las mismas declaraciones de registro en ambos registradores.

A través de la aplicación, actualmente tenemos la declaración GetLogger de la siguiente manera. Esto idealmente debe permanecer igual, por lo que el registro existente no cambia. Necesito un nuevo registrador que no se vea afectado por esta declaración, pero en su lugar se crea una instancia exclusivamente para el registro de terceros.

private readonly ILog _log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Y la App.Config de la siguiente manera.

< log4net> <logger name="MyApp.Logging"> <level value="DEBUG"/> </logger> <root> <level value="ALL" /> <appender-ref ref="LogFileAppender" /> </root> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="log-file.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="&#13;&#10;[Application started]&#13;&#10;" /> <param name="Footer" value="[Application Finished]&#13;&#10;"/> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> </ log4net>

¿Puede usted ayudar?

EDITAR

Si hace alguna diferencia. Los eventos de registro de terceros se capturan en la misma clase de la que también se activan algunos de mis eventos de registro de aplicación, esto es porque la clase es responsable de controlar el software de la 3ª parte. ¿Es esto un problema? Tengo una idea de que log4net puede diferenciar qué registrador crear en función de los nombres de las clases, y si ese es el caso ¿necesito refactorizar el registro de terceros a su propia clase?