2009-11-05 10 views
8

Estoy utilizando log4net y en una clase necesito iniciar sesión en un apilador RollingFile, pero luego en otra clase, deseo iniciar sesión en el registro de eventos + rolling file + console appender.iniciando sesión en log4net a diferentes appenders según las circunstancias

¿Cuál es la mejor práctica? y ¿podría ver algún código de muestra?

Por cierto, para hacer las cosas más difíciles, estoy usando Castle Windsor Logging Facility con Log4net para resolver mi instancia de Logger.

Si ayuda, estaba pensando en esto más adelante, pero tengo ni idea de si esta es la mejor práctica, o cómo activar un registrador particular basada en 'nombre' todavía la utilización de mi ejemplo actuales del registrador de Windsor:

log4net.config:

... 
    <logger name="EventLogOnly"> 
     <level value="ALL" /> 
     <appender-ref ref="EventLogAppender" /> 
    </logger> 
    <logger name="ConsoleEventLog"> 
     <level value="ALL" /> 
     <appender-ref ref="ColoredConsoleAppender" /> 
     <appender-ref ref="EventLogAppender" /> 
    </logger> 
... 

castillo de Windsor clase constructor de contenedores:

container.AddFacility("logging.facility", 
    new LoggingFacility(LoggerImplementation.Log4net, "log4net.config")); 

clase en la que ingrese a:

private ILogger Logger; 
public Test(ILogger logger) { 
    Logger.Info("Can I log under event log only?"); 
    Logger.Info("Now can I log under both?"); 
} 

Gracias chicos.

+0

Aquí puede encontrar la manera de crear una instancia de Logger nombrada [tip] (http://kenegozi.com/blog/2009/12/11/windsorrsquos-logging-facility-getting-a-named-instance) –

Respuesta

12

Puede hacer esto aplicando un filtro a un appender. Solo si el evento de registro pasa el filtro, el apicultor registra el evento.

Esta configuración de filtro registrará solamente aquellos eventos que vienen del registrador denominan "myLogger":

<appender name="EventLogAppender" ... 
    <filter type="log4net.Filter.LoggerMatchFilter"> 
     <loggerToMatch value="MyLogger" /> 
    </filter>  
    <filter type="log4net.Filter.DenyAllFilter" /> 
</appender> 

... y éste coincidirá con mensajes de registro con cierto texto contenía:

<filter type="log4net.Filter.StringMatchFilter"> 
    <stringToMatch value="database" /> 
</filter> 
<filter type="log4net.Filter.DenyAllFilter" /> 

Hay una buena cantidad de configuración posible con filtros. Consulte log4net SDK o la sección Filtros de manual para obtener más detalles.

+0

Gracias Michael, pero todavía no estoy seguro de cómo acceder a mi Logger por su nombre. Utilizando la función de registro en Castle Windsor, no instalo una nueva instancia usando LogManager.GetLogger ("loggerName"), se pasa una instancia para mí. – GONeale

+0

¿Has leído los enlaces en mi respuesta? Hay muchas cosas en las que puedes filtrar además del nombre del registrador. –

+0

Disculpe, sí, entiendo que está hablando de filtros, pero para empezar a trabajar con este appender, asumí que todavía necesitaba acceder al registrador por su nombre. ¿Cómo puedo obtener el appender para ser recogido? El uso de alrededor de los appenders funcionaba antes, ¿debería tratar de envolver este appender filtrado, en lugar de un registrador con nombre real? – GONeale

Cuestiones relacionadas