Pregunta

Estoy haciendo mi cambio de codificación en C ++ a C #. Necesito reemplazar mi sistema macro de registro / informe de errores de C ++ con algo similar en C #.

En mi fuente de C ++ puedo escribir

LOGERR (" Algún error "); o LOGERR (" Error con las entradas% sy% d " ;, stringvar, intvar);

La macro & amp; el código de biblioteca de soporte luego pasa el mensaje formateado (posiblemente varargs) a una base de datos junto con el archivo fuente, la línea fuente, el nombre de usuario y la hora. Los mismos datos también se introducen 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 de error básico?

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 el archivo de configuración XML de 500 líneas y log4net hará todo lo que pueda necesitar :)

¿Fue útil?

Solución

Muchos 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 se incluyen en el marco son DefaultTraceListener , TextWriterTraceListener y el EventLogTraceListener . Le permite especificar niveles (Advertencia, Error, Información) y categorías.

Clase de rastreo en MSDN
Escribir en el registro de eventos en una aplicación web
UdpTraceListener - escriba mensajes XML compatibles con log4net en un visor de registros como log2console

Otros consejos

Recomiendo encarecidamente mirar log4Net . Esta publicación cubre la mayoría de lo que necesita para obtener comenzado.

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.

Uso El marco de registro de Object Guy , como lo hacen la mayoría de las personas que lo prueban. Este tipo tiene algunos comentarios al respecto.

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

Muy recomendable.

Aunque personalmente lo odio, log4net parece ser el estándar de facto para el registro de C #. Uso de la 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 usando El marco de registro de Object Guy en múltiples Aplicaciones de producción durante varios años. Es súper fácil de usar y extender.

Log4Net es un marco de registro bastante completo que le permitirá iniciar sesión en diferentes niveles (Depuración , Error, Fatal) y enviar estas declaraciones de registro a diferentes lugares (archivo rodante, 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 registradores de texto clásicos que se usan:

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. a un archivo o la consola.

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

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

La sintaxis de la cadena de formato .NET se amplía para que pueda escribir el ejemplo anterior como:

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

En este caso, la propiedad se llamará Name (en lugar de 0 ), lo que facilita la consulta y la correlación.

Ya hay algunas buenas opciones para el almacenamiento. MongoDB y Azure Table Storage parecen ser muy populares para el bricolaje. Originalmente creé Serilog (aunque es un proyecto comunitario) y ahora estoy trabajando en un producto llamado Seq , que proporciona almacenamiento y la consulta de este tipo de eventos de registro estructurado.

Puedes usar el registro incorporado de .NET. Mire en TraceSource y TraceListeners, se pueden configurar en el archivo .config.

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 del mundo real con algunas adiciones útiles. Para log4net, sugeriría la parte superior de mi cabeza mirando subtexto . En particular, eche un vistazo a los bits de inicio e información de ensamblaje de la aplicación.

Además de los pocos comentarios relacionados con el uso de los métodos de diagnóstico de System.Diagnostics, también me gustaría señalar que DebugView La herramienta es muy buena para verificar el resultado de la depuración cuando sea necesario. DebugView cuando sea necesario.

El rastreo integrado en System.Diagnostics está bien en .NET Framework y lo uso en muchas aplicaciones. Sin embargo, una de las razones principales por las que sigo usando log4net es que el seguimiento de .NET Framework integrado carece de muchos de los útiles apéndices con todas las funciones que log4net ya proporciona.

Por ejemplo, realmente no hay un buen detector de rastreo de archivos continuos definido en .NET Framework que no sea el de un archivo VB.NET dll que realmente no es tan completo.

Dependiendo de su entorno de desarrollo, recomendaría usar log4net a menos que no haya herramientas de terceros disponibles, entonces diría que use las clases de rastreo System.Diagnostics. Si realmente necesita un mejor appender / tracelistener, siempre puede implementarlo usted mismo.

Por ejemplo, muchos de nuestros clientes requieren que no usemos bibliotecas de código abierto cuando se instalan en sus máquinas corporativas, por lo que en ese caso las clases de rastreo de .NET Framework son perfectas.

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

ExceptionLess es uno de los paquetes nuget más fáciles de usar para el registro. Es un proyecto de código abierto . Automáticamente se encarga de la excepción no controlada, y las opciones para registros manuales están disponibles . Puede iniciar sesión en línea o auto host en el servidor local.

Log4Net, como han dicho otros, es bastante común y similar a Log4j, que lo ayudará si alguna vez hace Java.

También tiene la opción de usar el Bloque de aplicación de registro http: // www. codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top