ejemplo appenders asp.net log4net

appenders - ID de solicitud única log4net en ASP.NET



log4net iis (4)

Aquí hay algunos métodos de extensión que he creado para este propósito:

public static Guid GetId(this HttpContext ctx) => new HttpContextWrapper(ctx).GetId(); public static Guid GetId(this HttpContextBase ctx) { const string key = "tq8OuyxHpDgkRg54klfpqg== (Request Id Key)"; if (ctx.Items.Contains(key)) return (Guid) ctx.Items[key]; var mutex = string.Intern($"{key}:{ctx.GetHashCode()}"); lock (mutex) { if (!ctx.Items.Contains(key)) ctx.Items[key] = Guid.NewGuid(); return (Guid) ctx.Items[key]; } }

log4net 1.2.11.0

Estoy tratando de obtener cualquier cosa que me permita iniciar sesión con un valor único para cada solicitud ASP.NET.

Intenté% thread, pero los hilos parecen ser reutilizados.

He intentado% aspnet-request y% aspnet-session que no tienen nada significativo dentro de ellos.

Miré ThreadContext.Properties y LogicalThreadContext.Properties pero tampoco tienen nada en ellos.

¿Alguien tiene un truco para hacer esto? Necesito la capacidad de elegir los registros de una solicitud particular fuera del archivo de registro.


.asmx archivos .asmx seguirán llamando al evento Application_BeginRequest , donde puede almacenar su GUID único en HttpContext.Current.Items (el uso de esta colección evita el problema impar cuando el procesamiento de solicitudes salta hilos). Solo si estuviera usando WCF (y también depende de la configuración) esto no funcionaría.

Si no quiere tocar la aplicación, puede usar HttpContext.Current.Timestamp que devuelve el tiempo en que se inició el procesamiento de la solicitud. Únase a eso con su enfoque actual de obtener el ID del hilo y obtendrá un valor único.


HttpContext.Current.Items - es una buena idea.

Intenta añadir algo así:

HttpContext.Current.Items.Add("RequestIdentity", Guid.NewGuid().ToString())


clock tick + process ID + process ID thread ID como almacenado cuando su solicitud comienza debería ser suficiente, creo (asumiendo que cada hilo maneja 1 solicitud a la vez).