log4net unique request id in ASP.NET

前端 未结 4 1143
天涯浪人
天涯浪人 2020-12-30 23:24

log4net 1.2.11.0

I am trying to get anything that will allow me to log with a unique value for each ASP.NET request.

I tried %thread, but threads appear to

相关标签:
4条回答
  • 2020-12-31 00:01

    clock tick + process ID + thread ID as stored when your request starts should be sufficient, I think (assuming each thread handles 1 request at a time).

    0 讨论(0)
  • 2020-12-31 00:12

    .asmx files will still call Application_BeginRequest event where you can store your unique GUID in HttpContext.Current.Items (using this collection avoid the odd problem when the request processing jumps threads). Only if you were using WCF (and also then it depends on configuration) this would not work.

    If you would like not to touch the application itself, you can use HttpContext.Current.Timestamp that returns the time when the request processing started. Join that with your existing approach of getting the ID of the thread and you will get a unique value.

    0 讨论(0)
  • 2020-12-31 00:25

    Here's some extension methods that I created for this purpose:

    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];
        }
    }
    
    0 讨论(0)
  • 2020-12-31 00:26

    HttpContext.Current.Items - is a good idea.

    Try to add something like thit:

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

    In .NET Core you can access it this way (from your controllers) HttpContext.Items and using HttpContextAccessor from anywhere else.

    All the details here.

    0 讨论(0)
提交回复
热议问题