Cuando escribe código 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 nombre de Apache es confiable y el marco de registro de Java original existe desde hace más de 15 años..
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 sabes.
Debe averiguar por qué se produjo un bloqueo para poder corregirlo. Con el registro habilitado, es posible que pueda ver por qué sucedió.
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.
Log4net admite siete niveles de registro de ninguno a todos con una prioridad creciente. Estos son:
Los niveles más altos incluyen todos los más bajos. Al depurar, el uso de DEBUG muestra todo, pero en la producción, es posible que solo le interese FATAL. Esta elección se puede hacer a nivel de componente mediante programación o en un archivo de configuración XML.
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 e 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 eventos por subcadenas coincidentes, nivel de evento, rango de niveles e inicio del nombre del registrador.
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.
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 hacer que un programador 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:
System.Reflection.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
Private static readonly ILog log = LogManager.GetLogger (System.Reflection.MethodBase.GetCurrentMethod
() .DeclaringType);
// solo lectura estática privada ILog log = LogManager.GetLogger (typeof (Program));
vacío estático Main (string [] args)
log.Debug ("Inicio de la aplicación");