1. Concepto Log4net es una librería de código diseñada para aplicaciones .NET que permite realizar el logeo de una aplicación hacia diferentes destinos (fichero de texto, base de datos, servidor de correo, registro del sistema, consola de la aplicación)
Log4net se configura usando parametros de configuración XML. Esta configuración puede insertarse dentro del archivo de configuración de la aplicación (app.config o web.config) o en un archivo externo
2. Codificación En este ejemplo voy a crear un log hacia un fichero de texto en una aplicación de consola.
Los pasos a seguir para crearlo son:
1 - Referenciar la librería de código log4net.dll en nuestro proyecto.
2 - Setear el archivo de configuración.
3 - Inicializar la clase.
2.a. Setear el configuración Hay que realizar los siguientes pasos en el archivo de configuración app.config.
- Agrego en configSections la definición de log4net
Plegar
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
- Defino los parámetros de la sección log4net
Plegar
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="C:\MiProyecto\log4net\LogTest.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="conversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
Para esta aplicación el archivo de configuración queda de la siguiente forma:
Plegar
1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3
4 <configSections>
5 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
6 </configSections>
7
8 <log4net>
9
10 <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
11 <param name="File" value="C:\MiProyecto\log4net\LogTest.txt" />
12 <param name="AppendToFile" value="true" />
13
14 <layout type="log4net.Layout.PatternLayout">
15 <param name="conversionPattern"
16 value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n" />
17 </layout>
18 </appender>
19
20 <root>
21 <level value="ALL" />
22 <appender-ref ref="LogFileAppender" />
23 </root>
24
25 </log4net>
26
27 </configuration>
2.3. Inicializar la clase Creo la clase LogTest y creo la variable logger.
Plegar
private static readonly ILog logger = LogManager.GetLogger(typeof(LogTest));
Carga la configuración del loger indicando que se utiliza el archivo de configuración de la aplicación (app.config).
Plegar
XmlConfigurator.Configure();
Codifico las acciones de logeo.
Plegar
logger.Debug("Texto de nivel Debug");
logger.Info("Texto de nivel Info");
logger.Warn("Texto de nivel Warn");
logger.Error("Texto de nivel Error");
logger.Fatal("Texto de nivel Fatal");
El código resultante queda de la siguiente forma:
Plegar
1 using log4net;
2 using log4net.Config;
3
4 namespace log4net
5 {
6 class LogTest
7 {
8
9 private static readonly ILog logger = LogManager.GetLogger(typeof(LogTest));
10
11 static void Main(string[] args)
12 {
13 Configuracion();
14 RegistrarLog();
15 }
16
17 /// <summary>
18 /// Configurar Logs
19 /// </summary>
20 private static void Configuracion()
21 {
22 //Con eso se le indica al log4net que utilice la configuración desde el archivo de configuracion (app.config o web.config)
23 XmlConfigurator.Configure();
24 }
25
26 /// <summary>
27 /// Registrar Logs
28 /// </summary>
29 private static void RegistrarLog()
30 {
31 logger.Debug("Texto de nivel Debug");
32 logger.Info("Texto de nivel Info");
33 logger.Warn("Texto de nivel Warn");
34 logger.Error("Texto de nivel Error");
35 logger.Fatal("Texto de nivel Fatal");
36 }
37 }
38 }
3. Conceder permiso de escritura Las aplicaciones de .NET son ejecutadas por el usuario ASPNET, que por defecto no tiene privilegios de escritura en el servidor. Por tanto si estamos escribiendo hacia un fichero de texto hay que darle al usuario ASPNET los permisos necesarios para escribir en la carpeta donde queramos guardar los logs y que hemos definido en el parámetro File.
4. Resultado El archivo de texto creado en la carpeta
Plegar
2008-03-02 21:13:42 [10] DEBUG log4net.LogTest - Texto de nivel Debug
2008-03-02 21:13:42 [10] INFO log4net.LogTest - Texto de nivel Info
2008-03-02 21:13:42 [10] WARN log4net.LogTest - Texto de nivel Warn
2008-03-02 21:13:42 [10] ERROR log4net.LogTest - Texto de nivel Error
2008-03-02 21:13:42 [10] FATAL log4net.LogTest - Texto de nivel Fatal
5. Recomendaciones Si bien se puede realizar un logeo hacia varios destinos recomiendo utilizar siempre ficheros de texto. La base de datos puede fallar, el servidor de correo puede estar dañado, el registro colapsado, etc.
El logeo hacia fichero de textos sólo requiere tener permiso de escritura en la carpeta seleccionada y es facilmente importable a base de datos o a XML.
6. Niveles de logeo Uno de los parametros más importante de configuración es el nivel de logeo.
Existen 5 niveles:
| DEBUG |
Prioridad 5 |
| INFO |
Prioridad 4 |
| WARN |
Prioridad 3 |
| ERROR |
Prioridad 2 |
| FATAL |
Prioridad 1 |
Log4net sólo imprime los logs de nivel superior o igual al asignado. Por ejemplo si fijo el nivel de log en WARN quedarán registrados también los de nivel superior ERROR y FATAL.
También puedo utilizar los valores ALL para todos los niveles y OFF para no realizar ningún registro.
De esta manera en modo desarrollo puedo realizar logeos a nivel de DEBUG y en modo producción "subir" el nivel a ERROR o FATAL. Este modelo se utiliza para realizar una traza de la aplicación modo desarrollo y en modo producción solo registrar errores no controlados de la aplicación.
7. Para investigar En una aplicación pueden convivir varios loggers que se definen también en el archivo de configuración utilizando etiqueta logger.
Se puede restringir la capacidad de almacenamiento del fichero de texto con el parametro maximumFileSize.
8. Links Sitio oficial para descarga log4net