Tenemos un servicio de ejecución de tareas de subprocesos múltiples que con frecuencia ejecuta tareas en paralelo. Como parte de nuestros mensajes de registro, queremos tener el nombre de la tarea, así como una identificación de ejecución (ContextKey). Actualmente tratando de establecer la clave de contexto en el constructor de tareas:
public AsyncTaskBase(ILogger logger, IContextKeyLocator locator) { _Logger = logger; _ContextKeyLocator = locator; contextKey = _ContextKeyLocator.GenerateAndSetContextKey(); log4net.ThreadContext.Properties["ContextKey"] = contextKey; }A partir de ahí, dejamos que el patrón appender de log4net registre la clave de contexto.
<conversionPattern value="%date [%thread] %-5level [%property{ContextKey}] - %message" />Y lo que vemos en los registros son una serie de mensajes de registro con los mismos valores de thread/contextKey que definitivamente no eran de la misma tarea.
Entonces mi pregunta es ¿cómo manejo este tipo de situación? Tenemos propiedades que nos gustaría tener en el mensaje de registro que son contextuales solo para la ejecución actual, pero también debe ser seguro para subprocesos. Cualquier ayuda, orientación, dirección, sería genial. ¡Gracias de antemano!