Básicamente quiero escribir un logger/tracer del cliente que también registra la clase y el nombre del método que llama al logger/tracer. Esto debe ser rápido para que no afecte el rendimiento de la aplicación, fuertemente tipado y limpio. ¿Alguien tiene buenas ideas?¿Cuál es la forma más eficaz de registrar el nombre de clase y método?
Éstos son los pocos que tenía pero me preocupa el rendimiento debido a la reflexión: (¿demasiado trabajo)
StackTrace/StackFrame
MethodInfo.GetCurrentMethod() (siendo demasiado lento? y no muy limpio) método
pase como delegado (C# puede hacerlo de forma implícita y tengo acceso a la MethodInfo, pero no muy limpio)
Agradezco los comentarios de cualquier persona.
ACTUALIZACIÓN:
Me gustó la cleanless de StackFrame por lo que hizo una pregunta más específica here con respecto a la actuación de StackFrame y me dio la muy buena respuesta que incluye pruebas de rendimiento. Resulta que MethodInfo.GetCurrentMethod()
es el más rápido (toma aproximadamente 1 microsegundo en mi computadora) y new StackFrame(1)
se puede solicitar bajo demanda (toma alrededor de 15-20 microsegundos en mi computadora). Lancé el método como opción de delegado, ya que es demasiado complicado cuando el método tiene varios parámetros.
CONCLUSIÓN:
He mirado todas las opciones y el mejor es escribir un plug-in personalizado para PostSharp que inyecta el nombre del método como cadena en MSIL durante la compilación cuando se aplica un atributo personalizado como [Trace]
a él. Es la opción más rápida y más fácil de mantener en mi opinión. Esto incluso permite muchas cosas más, como pasar los nombres y argumentos de los parámetros sin ningún tipo de reflexión y excepciones de captura y registro de forma automática. Esto my related question para más información.
¿Puedo preguntar, por qué no quiere usar log4net? – nWorx
No me gusta depender demasiado de otros componentes. Y también en el caso de log4net, es demasiado complejo. –
Hermann, esto se conoce generalmente en nuestra industria como "síndrome no inventado aquí" y es mejor evitarlo. Aquí hay un enlace de wikipedia con más información sobre esta aflicción: http://en.wikipedia.org/wiki/Not_Invented_Here –