Utilizzo di log4net per scrivere su diversi logger

Utilizzo di log4net per scrivere su diversi logger

Hai configurato Log4Net in modo che il logger radice registri sia su file che su appender del registro eventi. Tutti i logger ereditano questa configurazione, quindi entrambi i tuoi logger "DataIntakeService" ed "EventLogAppender" accedono a questi appender.

Se non vedi i messaggi di registro nel visualizzatore eventi, è possibile che la tua applicazione non disponga dell'autorizzazione per creare l'origine evento.

AGGIORNAMENTO

Ecco una configurazione di esempio:

<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 questo esempio:

  • Il logger radice (e quindi tutti i logger figlio se non diversamente configurato in modo esplicito) registrerà su LogFileAppender . Il tuo DataIntakeService logger non è configurato in modo esplicito, quindi eredita questa configurazione.

  • Il EventLogAppender logger è configurato esplicitamente per accedere a EventLogAppender ed è configurato per non ereditare le impostazioni dai logger principali (additivity="false" ). Pertanto non accede a LogFileAppender . Se imposti additivity="true" erediterà le impostazioni e accederà a entrambi LogFileAppender e EventLogAppender .

Per inciso, nominare un logger EventLogAppender è forse un po' confuso:EventLogLogger potrebbe essere un nome migliore.


Puoi utilizzare log4net per scrivere su diversi logger tramite la configurazione seguente.

<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>

E puoi chiamare i taglialegna come:

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