Cuando escribes codigo de computadora en C #, es una buena idea incluir el código de registro. De esa manera, cuando algo sale mal, sabes por dónde empezar a buscar. El mundo Java ha estado haciendo esto durante años. Puede usar log4net para este propósito. Es parte de Apache log4j 2, un popular marco de registro de código abierto.
Este no es el único marco de registro de .NET; Hay muchos. sin embargo, el apache name es de confianza y el marco de registro de Java original existe desde hace más de 15 años.
¿Por qué utilizar un marco de registro Log4net?
Cuando una aplicación o servidor falla, te preguntas por qué. ¿Fue una falla de hardware, malware, tal vez un ataque de denegación de servicio, o alguna combinación extraña de teclas que logra omitir todas las comprobaciones de código? Simplemente no lo sabes.
Debe averiguar por qué se produjo un bloqueo para poder corregirlo. Con el registro habilitado, es posible que pueda ver por qué sucedió.
Empezando
Descargue el archivo log4net del sitio web de Apache log4net. Verifique la integridad de los archivos descargados utilizando la firma PGP o las sumas de verificación MD5. Las sumas de verificación no son indicadores tan fuertes como la firma PGP.
Usando Log4net
Log4net admite siete niveles de registro de ninguno a todos con una prioridad creciente. Estos son:
- APAGADO
- FATAL
- ERROR
- ADVERTIR
- INFORMACIÓN
- DEPURAR
- TODAS
Los niveles más altos incluyen todos los más bajos. Al depurar, usando DEPURAR muestra todo, pero en producción, puede que solo te interese FATAL. Esta elección se puede hacer a nivel de componente mediante programación o en un archivo de configuración XML.
Loggers y Appenders
Para mayor flexibilidad, log4net utiliza registradores, anexos y diseños. Un registrador es un objeto que controla el registro y es una implementación de la interfaz ILog, que especifica cinco métodos booleanos: isDebugEnabled, IsInfoEnabled, IsWarnEnabled, IsErrorEnabled y IsFatalEnabled. También especifica los cinco métodos: depuración, información, advertencia, error y fatal, junto con sobrecargas y cinco versiones de cadenas formateadas. Puede ver la interfaz completa de ILog en el manual en línea de log4net.
A los registradores se les asigna uno de los niveles pero no TODOS o APAGADOS, solo los otros cinco.
Los anexos controlan a dónde va el registro. Puede estar en una base de datos, en un búfer en memoria, en la consola, en un host remoto, en un archivo de texto con registros continuos, el Registro de eventos de Windows o incluso por correo electrónico a través de SMTP. Hay 22 apéndices en total, y se pueden combinar para que tenga muchas opciones. Los anexos se agregan (de ahí el nombre) a un registrador.
Los anexos filtran los eventos por subcadenas coincidentes, nivel de evento, rango de niveles e inicio del nombre del registrador.
Diseños
Finalmente, hay siete diseños que pueden asociarse con un Appender. Estos controlan cómo se registra el mensaje del evento y pueden incluir texto de excepción, diseños de marca de tiempo y Elementos XML.
Configurar con XML
Aunque la configuración se puede hacer mediante programación, también se puede hacer con archivos de configuración XML. ¿Por qué preferirías los archivos de configuración sobre los cambios de código? Simple, es mucho más fácil hacer que un técnico de soporte realice un cambio en un archivo de configuración que tener que pedirle a un programador que cambie el código, pruebe y vuelva a implementar una nueva versión. Entonces los archivos de configuración son el camino a seguir. La ruta más simple posible es agregar App.config su proyecto, como se muestra en el siguiente ejemplo:
La documentación en línea de log4net explica todos los campos del archivo de configuración. Después de configurar App.config, agregue usando log4net y esta línea:
[ensamblaje: log4net. Config. XmlConfigurator (Watch = true)]
Además, el registrador real debe recuperarse con una llamada a LogManager. GetLogger (...). El GetLogger generalmente se llama con el typeof (clase) en el que se usa, pero esta llamada a la función también obtiene eso:
Sistema. Reflexión. MethodBase. GetCurrentMethod (). DeclaringType
Este ejemplo muestra ambos con un comentario, para que pueda elegir.
usando log4net;
[ensamblaje: log4net. Config. XmlConfigurator (Watch = true)]
espacio de nombres gvmake
{
Programa de clase
{
privado estático de solo lectura ILog log = LogManager. GetLogger (Sistema. Reflexión. MethodBase. GetCurrentMethod
() .DeclaringType);
// solo lectura estática privada ILog log = LogManager. GetLogger (typeof (Programa));
vacío estático Main (string [] args)
{
Iniciar sesión. Depuración ("Inicio de la aplicación");
}
}
}