Modo corretto di usare log4net (denominazione del logger)

Modo corretto di usare log4net (denominazione del logger)

Per quanto riguarda il modo in cui registri i messaggi all'interno del codice, opterei per il secondo approccio:

ILog log = LogManager.GetLogger(typeof(Bar));
log.Info("message");

Dove i messaggi inviati al registro sopra saranno "nominati" utilizzando il tipo completamente qualificato Bar , ad es.

MyNamespace.Foo.Bar [INFO] message

Il vantaggio di questo approccio è che è lo standard de facto per l'organizzazione della registrazione, inoltre consente di filtrare i messaggi di registro in base allo spazio dei nomi. Ad esempio, puoi specificare di voler registrare il messaggio di livello INFO, ma aumentare il livello di registrazione per Bar in particolare al DEBUG:

<log4net>
    <!-- appenders go here -->
    <root>
        <level value="INFO" />
        <appender-ref ref="myLogAppender" />
    </root>

    <logger name="MyNamespace.Foo.Bar">
        <level value="DEBUG" />
    </logger>
</log4net>

La possibilità di filtrare la registrazione tramite nome è una potente funzionalità di log4net, se registri semplicemente tutti i tuoi messaggi su "myLog" , perdi molto di questo potere!

Per quanto riguarda EPiServer CMS, dovresti essere in grado di utilizzare l'approccio sopra per specificare un livello di registrazione diverso per il CMS e il tuo codice.

Per ulteriori letture, ecco un articolo di codeproject che ho scritto sulla registrazione:

  • L'arte della registrazione

La mia risposta potrebbe arrivare in ritardo, ma penso che possa aiutare i principianti. Non vedrai i log eseguiti a meno che non vengano apportate le modifiche come di seguito.

2 I file devono essere modificati quando si implementa Log4net.

  1. Aggiungi riferimento a log4net.dll nel progetto.
  2. app.config
  3. Classe file in cui implementerai i log.

All'interno di [app.config ] :

Innanzitutto, in "configSections", è necessario aggiungere un pezzo di codice di seguito;

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

Quindi, sotto il blocco "configurazione", devi scrivere sotto un pezzo di codice (questo pezzo di codice è personalizzato secondo le mie necessità, ma funziona come un fascino.)

<log4net debug="true">
    <logger name="log">
      <level value="All"></level>
      <appender-ref ref="RollingLogFileAppender" />
    </logger>

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <maxSizeRollBackups value="1" />
      <maximumFileSize value="1MB" />
      <staticLogFileName value="true" />

      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %C.%M [%line] %-5level - %message %newline %exception %newline" />
      </layout>
    </appender>
</log4net>

Dentro Classe di chiamata :

All'interno della classe in cui utilizzerai questo log4net, devi dichiarare di seguito un pezzo di codice.

 ILog log = LogManager.GetLogger("log");

Ora sei pronto per il registro delle chiamate dove vuoi nella stessa classe. Di seguito è riportato uno dei metodi che puoi chiamare durante le operazioni.

log.Error("message");

Invece di nominare la mia classe di invocazione, ho iniziato a usare quanto segue:

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

In questo modo, posso utilizzare la stessa riga di codice in ogni classe che utilizza log4net senza dovermi ricordare di modificare il codice quando copio e incollo. In alternativa, potrei creare una classe di registrazione e far ereditare ogni altra classe dalla mia classe di registrazione .