Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
 /// <summary>
 /// 入队
 /// </summary>
 /// <param name="list"></param>
 public static void Enqueue(AddDebugLogRequest item)
 {
     //只有Task在运行时才往队列中添加消息
     if (DebugLogTask.Status == TaskStatus.Running)
     {
         DebugLogQueue.Enqueue(item);
     }
 }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        /// <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);
        }