/// <summary> /// 出队 /// </summary> /// <returns></returns> public static List <AddDebugLogRequest> Dequeue() { //从队列中取出一批消息 var result = new List <AddDebugLogRequest>(); AddDebugLogRequest item = null; while (true) { if (DebugLogQueue.TryDequeue(out item)) { result.Add(item); if (result.Count >= ConfigHelper.LogMaxPostCount) { break; } } else { //队列中没有消息直接返回 break; } } return(result); }
/// <summary> /// 入队 /// </summary> /// <param name="list"></param> public static void Enqueue(AddDebugLogRequest item) { //只有Task在运行时才往队列中添加消息 if (DebugLogTask.Status == TaskStatus.Running) { DebugLogQueue.Enqueue(item); } }
/// <summary> /// 新增调试日志 /// </summary> /// <param name="request"></param> /// <returns></returns> public ServiceResult <bool> AddDebugLog(AddDebugLogRequest request) { //增加黑名单功能 var result = new ServiceResult <bool> { ReturnCode = ReturnCodeType.Error }; //如果包含在黑名单中的,直接扔掉不写入db var debugLogBlackListCacheKey = "Log.Cache.DebugLogBlackList"; var debugLogBlackList = CacheHelper.Get(debugLogBlackListCacheKey) as List <TLogsDebugLogBlackList>; if (debugLogBlackList == null) { debugLogBlackList = _debugLogBlackListDao.GetAll(); CacheHelper.Set(debugLogBlackListCacheKey, debugLogBlackList); } if (debugLogBlackList.HasValue()) { var isMatchBlackList = IsMatchDebugLogBlackList(request, debugLogBlackList); if (isMatchBlackList) { result.ReturnCode = ReturnCodeType.Success; result.Content = true; return(result); } } //EmitMapper对象映射 var mapper = ObjectMapperManager.DefaultInstance.GetMapper <AddDebugLogRequest, TLogsDebugLog>(); var item = mapper.Map(request); var rs = _debugLogDao.Insert(item); if (rs == true) { result.ReturnCode = ReturnCodeType.Success; result.Content = true; } return(result); }
/// <summary> /// 是否匹配黑名单 /// </summary> /// <param name="request"></param> /// <returns></returns> private bool IsMatchDebugLogBlackList(AddDebugLogRequest request, List <TLogsDebugLogBlackList> debugLogBlackList) { //只要任意一个条件匹配即为true var message = request.Message.LZ4Decompress(); var isMatchRegex = false; foreach (var item in debugLogBlackList) { //SystemCode if (!item.SystemCode.IsNullOrEmpty() && request.SystemCode.EqualsIgnoreCase(item.SystemCode)) { return(true); } //Source if (!item.Source.IsNullOrEmpty() && request.Source.EqualsIgnoreCase(item.Source)) { return(true); } //MachineName if (!item.MachineName.IsNullOrEmpty() && request.MachineName.EqualsIgnoreCase(item.MachineName)) { return(true); } //IpAddress if (!item.IpAddress.IsNullOrEmpty() && request.IpAddress.Contains(item.IpAddress)) { return(true); } //ClientIp if (!item.ClientIp.IsNullOrEmpty() && request.ClientIp.Contains(item.ClientIp)) { return(true); } //AppdomainName if (!item.AppdomainName.IsNullOrEmpty() && item.AppdomainName.EqualsIgnoreCase(request.AppdomainName)) { return(true); } //Message //正则模式 if (item.IsRegex.HasValue && item.IsRegex.Value && !item.Message.IsNullOrEmpty()) { //如果message太长,使用正则会有性能问题,所以最好加上timeout设置 try { isMatchRegex = Regex.IsMatch(message, item.Message, RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(500)); } catch (RegexMatchTimeoutException ex) { //LogHelper.Error(() => string.Format("Timeout after {0} seconds matching {1}", ex.MatchTimeout, ex.Input)); } if (isMatchRegex) { return(true); } } else { //普通模式 if (!item.Message.IsNullOrEmpty() && message.ToLower().Contains(item.Message.ToLower())) { return(true); } } } return(false); }