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); }
希望我的做法能够给你带来灵感
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?