public override void OnActionExecuting(ActionExecutingContext context) { //日志 try { var hc = context.HttpContext; string controller = context.RouteData.Values["controller"].ToString().ToLower(); string action = context.RouteData.Values["action"].ToString().ToLower(); string url = hc.Request.Path.ToString() + hc.Request.QueryString.Value; var referer = hc.Request.Headers["referer"].ToString(); var requestid = UniqueTo.LongId().ToString(); hc.Response.Headers.Add("X-Request-Id", requestid); //客户端信息 var ct = new ClientTo(hc); //用户信息 var userinfo = new UserAuthAid(hc).Get(); //日志保存 var mo = new LogsAid.LogsVM() { LogName = userinfo?.UserName, LogNickname = userinfo?.Nickname, LogRequestId = requestid, LogAction = controller + "/" + action, LogUrl = url, LogIp = ct.IPv4.Split(',')[0].Trim(), LogReferer = referer, LogCreateTime = DateTime.Now, LogBrowserName = ct.BrowserName, LogSystemName = ct.SystemName, LogGroup = 1, LogLevel = "info" }; mo.LogContent = DicDescription[mo.LogAction.ToLower()]; LogsAid.Insert(mo); } catch (Exception) { } base.OnActionExecuting(context); }
public static LoggingModel GetLog(HttpContext context) { string reqPath = context.Request.Path.ToString(); string reqQueryString = context.Request.QueryString.ToString(); //客户端信息 var ct = new ClientTo(context); //用户信息 var userinfo = LoginService.Get(context); //日志保存 var mo = new LoggingModel() { LogApp = GlobalTo.GetValue("Common:EnglishName"), LogUid = userinfo?.UserName, LogNickname = userinfo?.Nickname, LogAction = reqPath, LogUrl = reqPath + reqQueryString, LogIp = ct.IPv4, LogReferer = ct.Referer, LogCreateTime = DateTime.Now, LogUserAgent = ct.UserAgent, LogGroup = "1", LogLevel = "I" }; var ddk = reqPath.ToLower().TrimStart('/'); if (DicDescription.ContainsKey(ddk)) { mo.LogContent = DicDescription[ddk]; } return(mo); }
public override void OnActionExecuting(ActionExecutingContext context) { var hc = context.HttpContext; string controller = context.RouteData.Values["controller"].ToString().ToLower(); string action = context.RouteData.Values["action"].ToString().ToLower(); var ca = "/" + controller + "/" + action; string url = hc.Request.Path.ToString() + hc.Request.QueryString.Value; //用户信息 var userinfo = Application.CommonService.GetLoginUserInfo(hc); //角色有权限访问配置的菜单 if (!Application.CommonService.QueryMenuIsAuth(userinfo.RoleId, ca)) { context.Result = new ContentResult() { Content = "unauthorized", StatusCode = 401 }; } //日志记录,设置“__nolog”参数可忽略日志记录,为压力测试等环境考虑(即一些不需要记录请求日志的需求) if (GlobalTo.GetValue <bool>("logs:enable") && string.IsNullOrWhiteSpace(hc.Request.Query["__nolog"].ToString())) { try { //客户端信息 var ct = new ClientTo(hc); //日志保存 var mo = new Domain.SysLog() { SuName = userinfo.UserName, SuNickname = userinfo.Nickname, LogAction = ca, LogUrl = url, LogIp = ct.IPv4, LogUserAgent = ct.UserAgent, LogCreateTime = DateTime.Now, LogGroup = 1, LogLevel = "I" }; if (DicDescription.ContainsKey(ca)) { mo.LogContent = DicDescription[ca]; } #region 分批写入日志 CurrentCacheLog.Enqueue(mo); //分批写入满足的条件:缓存的日志数量 int cacheLogCount = GlobalTo.GetValue <int>("logs:CacheWriteCount"); //分批写入满足的条件:缓存的时长,单位秒 int cacheLogTime = GlobalTo.GetValue <int>("logs:CacheWriteSecond"); //上次写入的时间 var cacheLogWriteKey = "Global_Logs_Write"; var cacheLogWrite = Core.CacheTo.Get(cacheLogWriteKey) as DateTime?; if (!cacheLogWrite.HasValue) { Core.CacheTo.Set(cacheLogWriteKey, cacheLogWrite = DateTime.Now); } if (CurrentCacheLog.Count > cacheLogCount || DateTime.Now.ToTimestamp() - cacheLogWrite.Value.ToTimestamp() > cacheLogTime) { //异步写入日志 System.Threading.ThreadPool.QueueUserWorkItem(_ => { try { var ipto = new IPAreaTo(); //写入日志前 var listMo = new List <Domain.SysLog>(); while (CurrentCacheLog.Count > 0) { var log = CurrentCacheLog.Dequeue(); log.LogId = Core.UniqueTo.LongId().ToString(); log.LogArea = ipto.Parse(log.LogIp); var uato = new UserAgentTo(log.LogUserAgent); log.LogBrowserName = uato.BrowserName + " " + uato.BrowserVersion; log.LogSystemName = uato.SystemName + " " + uato.SystemVersion; if (uato.IsBot) { log.LogGroup = 2; } listMo.Add(log); } using var db = Data.ContextBaseFactory.CreateDbContext(); db.SysLog.AddRange(listMo); db.SaveChanges(); //更新时间 Core.CacheTo.Set(cacheLogWriteKey, cacheLogWrite = DateTime.Now); } catch (Exception ex) { Console.WriteLine("写入日志出错:" + ex.Message); } }); } #endregion } catch (Exception ex) { Console.WriteLine("写入日志出错:" + ex.Message); } } base.OnActionExecuting(context); }
public override void OnResultExecuted(ResultExecutedContext context) { var hc = context.HttpContext; string controller = context.RouteData.Values["controller"].ToString().ToLower(); string action = context.RouteData.Values["action"].ToString().ToLower(); var ca = "/" + controller + "/" + action; string url = hc.Request.Path.ToString() + hc.Request.QueryString.Value; //用户信息 var userinfo = LoginService.GetLoginUserInfo(hc); //日志记录,设置“__nolog”参数可忽略日志记录,为压力测试等环境考虑(即一些不需要记录请求日志的需求) if (GlobalTo.GetValue <bool>("logs:enable") && string.IsNullOrWhiteSpace(hc.Request.Query["__nolog"].ToString())) { try { swAsync.Stop(); //客户端信息 var ct = new ClientTo(hc); //日志保存 var mo = new Domain.SysLog() { SuName = userinfo.UserName, SuNickname = userinfo.Nickname, LogAction = ca, LogUrl = url, LogIp = ct.IPv4, LogUserAgent = ct.UserAgent, LogCreateTime = DateTime.Now, LogGroup = 1, LogLevel = "I", LogRemark = $"请求耗时:{swAsync.ElapsedMilliseconds}毫秒" }; if (DicDescription.ContainsKey(ca)) { mo.LogContent = DicDescription[ca]; } //记录查询SQL var ovm = (context.Result as ObjectResult)?.Value as QueryDataOutputVM; if (ovm != null) { mo.LogContent += Environment.NewLine + ovm.QuerySql; } #region 分批写入日志 CurrentCacheLog.Enqueue(mo); //分批写入满足的条件:缓存的日志数量 int cacheLogCount = GlobalTo.GetValue <int>("logs:CacheWriteCount"); //分批写入满足的条件:缓存的时长,单位秒 int cacheLogTime = GlobalTo.GetValue <int>("logs:CacheWriteSecond"); //上次写入的时间 var cacheLogWriteKey = "Global_Logs_Write"; var cacheLogWrite = Core.CacheTo.Get(cacheLogWriteKey) as DateTime?; if (!cacheLogWrite.HasValue) { Core.CacheTo.Set(cacheLogWriteKey, cacheLogWrite = DateTime.Now); } if (CurrentCacheLog.Count > cacheLogCount || DateTime.Now.ToTimestamp() - cacheLogWrite.Value.ToTimestamp() > cacheLogTime) { //异步写入日志 System.Threading.ThreadPool.QueueUserWorkItem(_ => { try { var ipto = new IpAreaTo(); //写入日志前 var listMo = new List <Domain.SysLog>(); while (CurrentCacheLog.TryDequeue(out Domain.SysLog deobj)) { deobj.LogId = Core.UniqueTo.LongId().ToString(); deobj.LogArea = ipto.Parse(deobj.LogIp); var uato = new UserAgentTo(deobj.LogUserAgent); deobj.LogBrowserName = uato.BrowserName + " " + uato.BrowserVersion; deobj.LogSystemName = uato.SystemName + " " + uato.SystemVersion; if (uato.IsBot) { deobj.LogGroup = 2; } listMo.Add(deobj); } using var db = Data.ContextBaseFactory.CreateDbContext(); db.SysLog.AddRange(listMo); db.SaveChanges(); //更新时间 Core.CacheTo.Set(cacheLogWriteKey, cacheLogWrite = DateTime.Now); } catch (Exception ex) { Console.WriteLine("写入日志出错:" + ex.Message); } }); } #endregion } catch (Exception ex) { Console.WriteLine("写入日志出错:" + ex.Message); } } base.OnResultExecuted(context); }