asp.net 简单日志收集

做开发的都知道,完整的日志记录对问题的解决,回溯是多么的重要,多么的不可缺少。

那么我们怎么记录完整的日志?

今天,我们来说一说问题:从哪里开始记录呢?在哪里保存呢?

IHttpModule,这个大家用到过没有?,我想绝大部分同学都用到过的,

不了解的看看wolfy 同学的 https://www.cnblogs.com/wolf-sun/p/4338970.html 主要是看看IHttpModule在请求处理过程中的执行位置,以及BeginRequest ReleaseRequestState的执行时间点;

IHttpModule里面有一个Init方法,需要我们写几行代码

public void Init(HttpApplication context)
{ 
  context.BeginRequest += new EventHandler(OnBeginRequest);
  context.ReleaseRequestState += new EventHandler(OnReleaseRequestState);
  context.Error += new EventHandler(OnError);      
}

 

context.BeginRequest:请求开始第一个触发事件

context.ReleaseRequestState:请求结束前的最后一个触发事件,这个事件里面可以访问到httpcontext

context.Error:发生系统错误时触发,如403,404

搞明白前面几个时间的触发点,接下来就是声明一个日志对象了

public void OnBeginRequest(Object source, EventArgs e)
{
  var logItem = new Log()
            {
          //请求完整的url
                ActionUrl = HttpContext.Current.Request.RawUrl,
          //请求id
                RequestID= SessionManager.RequestID,                
          //客户端IP
                ClientIP = HttpContext.Current.Request.UserHostAddress,
          //日志主体对象
          LogData = new StringBuilder(),           
            };
      HttpContext.Current.Items["Log"] = LogItem;


}

 

日志对象就算是创建好了,哪里需要写日志,就可以往LogData里面写入数据

接下来就是吧日志保存下来了,我是把日志存到数据里面的,方便查询嘛

public void OnReleaseRequestState(Object source, EventArgs e)
{
    var logitem = (Log)HttpContext.Current.Items["log"];
    LogBiz.GetInstance().SaveLog(logitem);     
}

 

希望我的做法能够给你带来灵感

 

posted @ 2019-03-27 13:43  jikhww  阅读(337)  评论(0编辑  收藏  举报