martes, 26 de febrero de 2013

Como usar log4net en nuestras aplicaciones

En esta entrada voy a explicar como usar log4net la librería de log para saber lo que está ocurriendo en la aplicación que estamos desarrollando.
La principal ventaja de usar log4net es que dicha librería es altamente configurable, puedes enviar las trazas a un fichero, a la consola, al visor de eventos o a una tabla de la base de datos, ademas se puede configurar el nivel de información que se va a sacar así como también se puede configurar el tamaño del fichero de log que vamos a usar para limitar su crecimiento(esto es útil para no colapsar el disco duro).
La mejor forma de empezar con log4net es utilizando NuGet, en la consola de NuGet ejecutamos el siguiente comando:
Install-Package log4net

Usando NuGet nos aseguramos de tener la última versión de log4net.
Una vez instalado el paquete habrá que hacer varias acciones para poderlo usar:
  1. Se tiene que añadir en el fichero AssemblyInfo.cs un atributo para que coja la configuración que le daremos en el siguiente paso; si no se pone la siguiente linea no cogerá la configuración del fichero de configuarción. El atributo que hay que poner:
      [assemblylog4net.Config.XmlConfigurator(Watch = true)]
    Se pone Watch=true para que cuando se cambia la configuración log4net esta se reconfigure en caliente, esto es útil en entornos de producción que se quiere saber con mas detalle que está pasando en la aplicación; por ejemplo la aplicación esta configurada para que saque los errores pero hay algo que no es un error pero no funciona como debería hacerlo de esta forma podemos cambiar la configuración para que la librería nos de un nivel de información mas detallado.
  2. Ahora toca poner la configuración de log4net para que saque el log, para ellos creamos un fichero app.config si no está creado o usamos el web.config en el caso de aplicaciones web.
  3. Dentro del fichero de configuracion hay que indicarle la nueva sección de configuración de log4net, se hace con el siguiente codigo:
    <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
     
  4. Una vez definida la sección la creamos y ponemos la configuración que vamos a usar. En la configuración hay que definir los "appender" que básicamente indican dónde escribir los mensajes que va soltando el log. Y luego decir que vamos a mostrar y por donde. El código para hacer esto es:
        <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
          <mapping>
            <level value="INFO" />
            <foreColor value="White, HighIntensity" />
            <backColor value="Green" />
          </mapping>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%5level [%thread] %message%newline" />
          </layout>
        </appender>
    Dentro del apender hemos configurado el "ColoredConsoleAppender" para que muestre los log en la consola con colores. En el mapping le indicamos el nivel y que colores vamos a usar, blanco intenso sobre fondo verde y el nivel, en este caso INFO. En la seccion de layout indicamos que es lo que vamos a mostrar, en este caso el nivel, el hilo de ejecución, el mensaje y cambio de linea.
  5. Lo que queda de la configuración es la sección de root que le indica que nivel y que appender vamos a utilizar; como ejemplo:
        <root>
          <level value="INFO" />
          <appender-ref ref="ColoredConsoleAppender" />
        </root>
  6. Una vez todo configurado ya podemos usar la librería en nuestro código  Para ello hacemos una referencia a su espacio de nombres con using: using log4net
  7. Creamos un miembro del tipo ILog para poder usar la librería  este miembro se inicializa con la clase "LogManager" y se usa el método "GetLogger" como ejemplo:
    private static readonly ILog Log = LogManager.GetLogger(typeof (Program)); 
     
    Esta miembro lo creamos como estático para que sea accesible a todas las funciones y también se crea como readonly ya que se crea y no se modifica, a la función se le pasa el tipo de la clase para que lo lea del archivo de configuración.
  8. Ya podemos usar los metodos de ILog para escribir los mensajes en cada función, se puede usar Info, Debug, Error, Warm, etc... que definen el nivel de log, y como parámetro se le pasa una cadena.
De esta forma ya podemos ver que es lo que está pasando en nuestra aplicación sin tener que depurar.

2 comentarios:

Anónimo dijo...

Hola, Muchas gracias, estaba buscando una manera para implementar log4net en un class library. Me funcionó muy bien.
Saludos.

José Ignacio Pérez Culla-González dijo...

Hola, gracias a ti, y me alegro que te haya sido útil