log4net unique request id in ASP.NET

最后都变了- 提交于 2019-12-30 02:36:09

问题


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 be reused.

I've tried %aspnet-request and %aspnet-session which don't have anything meaningful within them.

I looked at ThreadContext.Properties and LogicalThreadContext.Properties but they don't have anything in them either.

Anyone have a trick to get this done? I need the ability to pick a particular request's logs out of the log file.


回答1:


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).




回答2:


.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.




回答3:


HttpContext.Current.Items - is a good idea.

Try to add something like that:

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



回答4:


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];
    }
}


来源:https://stackoverflow.com/questions/15842321/log4net-unique-request-id-in-asp-net

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!