在Log4net日志中添加自定义请求ID

Log4net是一个被.net开发者广泛使用的一个写日志类库,但是日常查看web站点的日志时会发现日志内容混乱难以区分。往往前一行是A请求线程写的日志,下一行就不知道是哪个请求线程写的了。

面对这个问题,我们为了更好区分开不同请求写的日志,我们利用Log4net的property(属性)功能引入自己定义的[请求ID],以标记每一个不同的请求。

具体操作如下

①在Web站点右键“添加”->“新建项”,添加一个“全局应用程序类”,如下图

全局应用程序类

②添加了全局应用程序类(Global.asax)后,我们打开Global.asax添加以下方法代码

protected void Application_BeginRequest(object sender, EventArgs e)
    {
        //若已存在Application_BeginRequest,则在Application_BeginRequest中添加以下代码
        //在每一次请求的开始,使用GUID在log4net中定义一个唯一的请求ID
        log4net.GlobalContext.Properties["requestId"] = System.Guid.NewGuid().ToString("N");
    }

③修改log4net的日志配置(你应该找到你的log4net的配置文件),将在第二步中定义的ID写到日志当中

<!--在ConversionPattern配置中利用%property{requestId}语法调用我们在log4net中定义的[自定义请求ID]requestId-->

<param name="ConversionPattern" value="%n自定义请求ID:%property{requestId}%n日志时间:%d [%t] %n日志级别:%-5p %n日 志 类:%c [%L] %n%m %n" />

最后我们保存配置,查看新的日志内容就能看到一行”自定义请求ID:“后面是一个GUID字符串,只要是同一个GUID值则表示这些日志是来自同一个请求