Usando log4net para escribir en diferentes registradores

Usando log4net para escribir en diferentes registradores

Ha configurado Log4Net para que el registrador raíz se registre en los agregadores de registro de archivos y eventos. Todos los registradores heredan esta configuración, por lo que sus registradores "DataIntakeService" y "EventLogAppender" registran en estos agregadores.

Si no ve los mensajes de registro en el visor de eventos, puede deberse a que su aplicación no tiene permiso para crear la fuente del evento.

ACTUALIZAR

Aquí hay una configuración de muestra:

<log4net>
  <root>
    <level value="INFO" />
    <appender-ref ref="LogFileAppender" />
  </root>
  <logger name="EventLogAppender" additivity="False">
    <level value="INFO" />
    <appender-ref ref="EventLogAppender" />
  </logger>
  <appender>
  ... 

Con esta muestra:

  • El registrador raíz (y, por lo tanto, todos los registradores secundarios, a menos que se configure explícitamente de otra manera) se registrará en LogFileAppender . Tu DataIntakeService El registrador no está configurado explícitamente, por lo que hereda esta configuración.

  • El EventLogAppender el registrador está configurado explícitamente para iniciar sesión en EventLogAppender y está configurado para no heredar la configuración de los registradores principales (additivity="false" ). Por lo tanto, no se registra en LogFileAppender . Si establece additivity="true" heredará la configuración y se registrará en ambos LogFileAppender y EventLogAppender .

Por cierto, nombrar a un registrador EventLogAppender es quizás un poco confuso:EventLogLogger podría ser un mejor nombre.


Puede usar log4net para escribir en diferentes registradores mediante la configuración a continuación.

<log4net>
<logger name="LogFileLogger">
  <level value="INFO" />
  <appender-ref ref="LogFileAppender" />
</logger>
<logger name="EventLogger">
  <level value="INFO" />
  <appender-ref ref="EventLogAppender" />
</logger>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
  ...
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
  ...
</appender>

Y puede llamar a los registradores como:

private static readonly log4net.ILog LogFileLogger= log4net.LogManager.GetLogger("LogFileLogger");
private static readonly log4net.ILog EventLogger= log4net.LogManager.GetLogger("EventLogger");