practices - Error al iniciar sesión en C#
log de errores c# (15)
Estoy haciendo mi cambio de codificación en C ++ a C #. Necesito reemplazar mi sistema macro de registro / reporte de errores C ++ con algo similar en C #.
En mi fuente C ++ puedo escribir
LOGERR ("Algún error"); o LOGERR ("Error con las entradas% s y% d", stringvar, intvar);
El código de la biblioteca macro y de apoyo pasa el mensaje formateado (posiblemente varargs) a una base de datos junto con el archivo de origen, la línea de origen, el nombre de usuario y la hora. Los mismos datos también se incluyen en una estructura de datos para informar posteriormente al usuario.
¿Alguien tiene fragmentos de código C o punteros a ejemplos que hacen este informe / registro básico de errores?
Editar: En el momento en que hice esta pregunta, era realmente nuevo en .NET y desconocía System.Diagnostics.Trace. System.Diagnostics.Trace era lo que necesitaba en ese momento. Desde entonces, he usado log4net en proyectos donde los requisitos de registro eran más grandes y más complejos. Simplemente edite ese archivo de configuración XML de 500 líneas y log4net hará todo lo que necesite :)
Además del par de comentarios sobre el uso de los métodos System.Diagnostics para el registro, también me gustaría señalar que la herramienta DebugView es muy clara para verificar la salida de depuración cuando sea necesario; a menos que lo requiera, no hay necesidad de las aplicaciones para producir un archivo de registro, acaba de ejecutar DebugView como sea necesario.
Aunque personalmente lo odio, log4net parece ser el estándar de facto para el registro de C #. Uso de muestra:
log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Error(“Some error”);
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);
Como dije en otro hilo, hemos estado utilizando The Object Guy''s Logging Framework en varias aplicaciones de producción durante varios años. Es súper fácil de usar y extender.
El seguimiento integrado en System.Diagnostics está bien en .NET Framework y lo uso en muchas aplicaciones. Sin embargo, una de las principales razones por las que sigo usando log4net es que el rastreo integrado de .NET Framework carece de muchos de los complementos útiles que log4net ya proporciona.
Por ejemplo, realmente no hay un buen agente de seguimiento de seguimiento de archivos definido en el .NET Framework que no sea el de una DLL de VB.NET que realmente no tiene todas las características.
Dependiendo de su entorno de desarrollo, recomendaría usar log4net a menos que las herramientas de terceros no estén disponibles, entonces yo diría que use las clases de rastreo de System.Diagnostics. Si realmente necesita un appender / tracelistener mejor, siempre puede implementarlo usted mismo.
Por ejemplo, muchos de nuestros clientes requieren que no usemos bibliotecas de código abierto cuando están instalados en sus máquinas corporativas, por lo que en ese caso las clases de rastreo de .NET Framework encajan perfectamente.
Además, http://www.postsharp.org/ es una biblioteca de AOP que estoy buscando y que también puede ayudar a iniciar sesión como se demuestra aquí en el proyecto de código: http://www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx .
Lo mismo para log4net. Estoy agregando mis dos bits porque para el uso real, tiene sentido mirar algunas implementaciones de código abierto para ver ejemplos de código de mundo real con algunas adiciones útiles. Para log4net, sugeriría que fuera de mi cabeza mirando el subtext . En particular, eche un vistazo a los bits de inicio de la aplicación y de información de montaje.
Log4Net, como han dicho otros, es bastante común y similar a Log4j, lo que te ayudará si alguna vez haces Java.
También tiene la opción de utilizar el bloque de aplicación de registro http://www.codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx
Muchos de los defensores de log4net aquí, así que estoy seguro de que esto se ignorará, pero agregaré mi propia preferencia:
System.Diagnostics.Trace
Esto incluye oyentes que escuchan sus métodos Trace()
y luego escriben en un archivo de registro / ventana de salida / registro de eventos, los que están incluidos en el marco son DefaultTraceListener
, TextWriterTraceListener
y TextWriterTraceListener
. Le permite especificar niveles (Advertencia, Error, Información) y categorías.
Clase de seguimiento en MSDN
Escribir en el registro de eventos en una aplicación web
UdpTraceListener - escribe mensajes XML compatibles con log4net en un visor de registro como log2console
Otra buena biblioteca de registro es NLog , que puede iniciar sesión en muchos lugares diferentes, como archivos, bases de datos, registrador de eventos, etc.
Puede usar el registro integrado en .NET. Mire en TraceSource y TraceListeners, se pueden configurar en el archivo .config.
Utilizo el Framework de registro de The Object Guy, como la mayoría de las personas que lo intentan. Este chico tiene algunos comments interesantes al respecto.
log4Net es un framework de registro bastante completo que le permitirá iniciar sesión en diferentes niveles (Debug, Error, Fatal) y generar estas sentencias de registro en diferentes lugares (archivo continuo, servicio web, errores de Windows)
Puedo iniciar sesión fácilmente en cualquier lugar creando una instancia del registrador
private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));
y luego registrando el error.
_log.Error("Error messsage", ex);
Serilog llega tarde a la fiesta aquí, pero trae algunas opciones interesantes a la mesa. Se parece mucho a los leñadores clásicos basados en texto para usar:
Log.Information("Hello, {0}", username);
Pero, a diferencia de los marcos anteriores, solo representa el mensaje y los argumentos en una cadena al escribir texto, por ejemplo, en un archivo o la consola.
La idea es que si está utilizando un almacén de datos al estilo ''NoSQL'' para registros, puede registrar eventos como:
{
Timestamp: "2014-02-....",
Message: "Hello, nblumhardt",
Properties:
{
"0": "nblumhardt"
}
}
La sintaxis de la cadena de formato .NET se extiende para que pueda escribir el ejemplo anterior como sigue:
Log.Information("Hello, {Name}", username);
En este caso, la propiedad se llamará Name
(en lugar de 0
), facilitando la consulta y la correlación.
Ya hay algunas buenas opciones de almacenamiento. MongoDB y Azure Table Storage parecen ser bastante populares para el bricolaje. Originalmente construí Serilog (aunque es un proyecto de la comunidad) y ahora estoy trabajando en un producto llamado Seq , que proporciona almacenamiento y consulta de este tipo de eventos de registro estructurados.
Enterprise Library es una alternativa sólida a log4Net y ofrece muchas otras capacidades (caching, manejo de excepciones, validación, etc.). Lo uso en casi todos los proyectos que construyo.
Muy recomendable.
ExceptionLess es uno de los paquetes nuget más fáciles de usar para el registro. Es un proyecto de código abierto. Se ocupa automáticamente de la excepción no controlada y las opciones para registros manuales están disponibles. Puede iniciar sesión en línea o auto- servidor en el servidor local.