Forma correcta de usar log4net (nombre del registrador)

Forma correcta de usar log4net (nombre del registrador)

Con respecto a cómo registra mensajes dentro del código, optaría por el segundo enfoque:

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

Donde los mensajes enviados al registro anterior serán 'nombrados' usando el tipo totalmente calificado Bar , por ejemplo

MyNamespace.Foo.Bar [INFO] message

La ventaja de este enfoque es que es el estándar de facto para organizar el registro, también le permite filtrar sus mensajes de registro por espacio de nombres. Por ejemplo, puede especificar que desea registrar el mensaje de nivel INFO, pero elevar el nivel de registro para Bar específicamente para 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 capacidad de filtrar su registro por nombre es una característica poderosa de log4net, si simplemente registra todos sus mensajes en "myLog" , ¡pierdes gran parte de este poder!

Con respecto al EPiServer CMS, debería poder utilizar el enfoque anterior para especificar un nivel de registro diferente para el CMS y su propio código.

Para leer más, aquí hay un artículo de proyecto de código que escribí sobre el registro:

  • El arte de registrar

Mi respuesta puede llegar tarde, pero creo que puede ayudar a los novatos. No verá los registros ejecutados a menos que se realicen los cambios que se indican a continuación.

2 Los archivos deben cambiarse cuando implemente Log4net.

  1. Añadir referencia de log4net.dll en el proyecto.
  2. aplicación.config
  3. Clase archivo donde implementará Logs.

Dentro de [app.config ] :

Primero, en 'configSections', debe agregar el siguiente fragmento de código;

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

Luego, en el bloque de 'configuración', debe escribir debajo del código. (Este código está personalizado según mis necesidades, pero funciona de maravilla).

<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 de Clase de llamadas :

Dentro de la clase en la que va a utilizar este log4net, debe declarar el siguiente fragmento de código.

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

Ahora, está listo para registrar llamadas donde quiera en esa misma clase. A continuación se muestra uno de los métodos que puede llamar mientras realiza operaciones.

log.Error("message");

En lugar de nombrar mi clase de invocación, comencé a usar lo siguiente:

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

De esta manera, puedo usar la misma línea de código en cada clase que usa log4net sin tener que recordar cambiar el código cuando copio y pego. Alternativamente, podría crear una clase de registro y hacer que todas las demás clases hereden de mi clase de registro .