Estoy buscando en C# tala y yo no quiero que mis mensajes de registro que pasar ningún tiempo de procesamiento si el mensaje está por debajo del umbral de la tala. Lo mejor que veo que log4net hace es una comprobación de umbral DESPUÉS de evaluar los parámetros de registro.trucos de rendimiento para C# Registro
Ejemplo:
_logger.Debug("My complicated log message " + thisFunctionTakesALongTime() + " will take a long time")
Incluso si el umbral está por encima de Depuración, thisFunctionTakesALongTime todavía serán evaluados.
En log4net que se supone que usar _logger.isDebugEnabled por lo que terminan con
if(_logger.isDebugEnabled)
_logger.Debug("Much faster")
quiero saber si hay una mejor solución para el registro de .NET que no implique un cheque cada vez que quiero iniciar sesión.
En C++ se me permite hacer
LOG_DEBUG("My complicated log message " + thisFunctionTakesALongTime() + " will take no time")
desde mi macro LOG_DEBUG le examina el nivel de registro en sí. Esto me libera para tener un mensaje de registro de 1 línea a lo largo de mi aplicación que prefiero mucho. ¿Alguien sabe de una manera de replicar este comportamiento en C#?
Pero si estoy evaluando funciones para obtener el mensaje de registro, ¿no sería tan lento? Quiero evitar todas las evaluaciones de funciones si el nivel de registro está por debajo de mi umbral. – Charles
Tiene razón en que necesitará retrasar la evaluación de la función.Ver mi actualización que usa un delegado anónimo. –
D'oh, esa fue mi respuesta también. Debo advertirle que si está buscando velocidad, no quiere usar delegados. Debería tomar el golpe y usar si 'if (logger.isDebugEnabled)' alrededor de cualquier cosa costosa. No hay una solución que sea tan eficiente como elegante. – bobbymcr