2008-09-29 22 views
73

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#.Error al iniciar sesión en C#

En mi fuente de C++ Puedo escribir

LOGERR ("Algunos de error"); o LOGERR ("Error con las entradas% s y% d", stringvar, intvar);

El macro & código de biblioteca de soporte 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?

Edit: En el momento en que hice esta pregunta, era realmente nuevo en .NET y no conocí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 :)

Respuesta

72

Un montón de defensores log4net aquí, así que estoy seguro de que esto será ignorado, pero voy a añadir mi propia preferencia:

System.Diagnostics.Trace 

Esto incluye a los oyentes que escuchan sus Trace() métodos, y luego escribir en un archivo de registro/ventana de salida/registro de eventos, los que están incluidos en el marco son DefaultTraceListener, TextWriterTraceListener y EventLogTraceListener. Le permite especificar niveles (Advertencia, Error, Información) y categorías.

Trace class on MSDN
Writing to the Event Log in a Web Application
UdpTraceListener - write log4net compatible XML messages to a log viewer such as log2console

+20

+1 Pequeña adición, Trace está activo si y solo si compiló con el símbolo del preprocesador TRACE. – user7116

+1

Una cosa a tener en cuenta con TextWriterTraceListener es que no marca el tiempo –

+6

Puede anular el método 'WriteLine()' en 'TextWriterTraceListener' para obtener la capacidad automática de sellado de tiempo en el archivo de registro. Ver [este artículo de CodeProject] (http://www.codeproject.com/KB/dotnet/customnettracelisteners.aspx), sección 6. –

5

Aunque personalmente lo odio, log4net parece ser el estándar de facto para el registro de C#. Ejemplo de uso:

log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program)); 
log.Error(“Some error”); 
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar); 
+1

¿Qué pasa con log4Net? –

+12

Hace el trabajo, pero odio la documentación y estoy resentido por haber pasado muchas horas jugueteando con los archivos de configuración y, básicamente, volando a ciegas hasta que pude hacer cosas relativamente simples que funcionaban como yo quería. –

+4

He usado log4net y aprecio que es una herramienta poderosa (y NHibernate y otros lo usan). Pero tengo curiosidad de por qué a la gente no le gusta usar el rastreo incorporado de .NET 2.0. Con los diferentes tipos de oyentes y algunas herramientas, parece mucho menos desordenado que log4net, que es un puerto de Java. –

40

Recomiendo encarecidamente mirando log4Net. Este post cubre la mayoría de lo que necesita para comenzar.

+0

"Al comienzo de cada clase, declare una instancia de registrador de la siguiente manera ..." Me perdieron allí. :-) – Kos

3

Log4Net es un marco de registro bastante completo que le permitirá conectarse a diferentes niveles (de depuración, error fatal) y la salida de estas declaraciones de registro a lugares diferentes pueden (archivo de rodadura, servicio web, errores de Windows)

Puedo iniciar sesión en cualquier lugar fácilmente al crear una instancia del registrador

private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name])); 

y luego registrar el error.

_log.Error("Error messsage", ex); 
11

Enterprise Library es una alternativa sólida a log4net y ofrece un montón de otras capacidades, así (caching, manejo de excepciones, validación, etc ...). Lo uso en casi todos los proyectos que construyo.

Muy recomendado.

+1

EL incluso puede enviar correos electrónicos como parte del registro. Muy útil cuando se informan errores prod. – StingyJack

1

Id. 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, yo sugeriría de la parte superior de mi cabeza mirando subtext. En particular, eche un vistazo a los bits de inicio de la aplicación y de información de montaje.

15

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.

+1

NLog es un muy buen registrador y es fácil de usar. – meffordm

1

En relación con la pareja de los comentarios realting a la utilización de los métodos System.Diagnostics para el registro, también me gustaría señalar que la herramienta DebugView es muy clara para el control de depurar salida cuando sea necesario, a menos que lo requiera, no hay necesidad de que las aplicaciones produzcan un archivo de registro, simplemente inicie DebugView cuando sea necesario.

2

puede utilizar construido en el registro de .NET. Mire en TraceSource y TraceListeners, se pueden configurar en el archivo .config.

5

Como dije en otro hilo, que hemos estado usando The Object Guy's Logging Framework en múltiples aplicaciones de producción durante varios años. Es súper fácil de usar y extender.

1

el construido en el seguimiento en System.Diagnostics está muy bien en el .NET Framework y lo uso en muchas aplicaciones. Sin embargo, una de las principales razones por las que sigo utilizando log4net es que el trazado de .NET Framework incorporado carece de muchos de los appenders completos que log4net ya proporciona integrados.

Por ejemplo, realmente no hay un buen archivo de datos. trace listener definido en .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 yo recomendaría usar log4net menos 3 ª Parte herramientas no están disponibles, entonces yo diría que el uso de las clases System.Diagnostics rastreo. Si realmente necesita un appender/tracelistener mejor, siempre puede implementarlo usted mismo.

Por ejemplo, muchos de nuestros clientes requieren que nosotros no usamos bibliotecas de código abierto cuando se instala en sus equipos corporativos, por lo que en ese caso las clases de rastreo de .NET Framework son un ajuste perfecto.

Además - http://www.postsharp.org/ es una biblioteca de AOP que estoy buscando que también puede ayudar en el registro como se demuestra aquí en el proyecto de código: http://www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx.

3

Serilog es tarde a la fiesta aquí, pero trae algunas opciones interesantes a la mesa.Se parece mucho a los registradores basados ​​en texto clásicos de usar:

Log.Information("Hello, {0}", username); 

Pero, a diferencia de los marcos anteriores, que sólo hace que el mensaje y argumentos en una cadena de texto al escribir, por ejemplo, a un archivo o la consola.

La idea es que si usted está utilizando un 'almacén de datos de estilo NoSQL' para los registros, se puede registrar eventos como:

{ 
    Timestamp: "2014-02-....", 
    Message: "Hello, nblumhardt", 
    Properties: 
    { 
     "0": "nblumhardt" 
    } 
} 

La sintaxis de cadena de formato de .NET se amplía para que pueda escribir el por encima de ejemplo, como:

Log.Information("Hello, {Name}", username); 

En este caso la propiedad se llama Name (en lugar de 0), haciendo de consulta y la correlación más fácil.

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.

1

ExceptionLess es uno de los paquetes nuget más fáciles de usar para el registro. Es un proyecto open source. Se ocupa automáticamente de la excepción no controlada, y las opciones para manually logs están disponibles. Puede iniciar sesión en línea o self host en el servidor local.

+1

Trabajo en el proyecto Exceptionless y estaré encantado de responder cualquier pregunta. Tenemos objetivos de registro para todos los principales marcos de trabajo de registro, por lo que puede obtener un gran valor de forma inmediata al usar Exceptionless (mensajes de registro gratuitos + excepciones no controladas) –

Cuestiones relacionadas