示例#1
0
        /// <summary>
        /// 插入error log
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public ServiceResult <bool> AddErrorLog(AddErrorLogRequest request)
        {
            var result = new ServiceResult <bool>
            {
                ReturnCode = ReturnCodeType.Error
            };

            //如果包含在黑名单中的,直接扔掉不写入db
            var errorLogBlackListCacheKey = "Log.Cache.ErrorLogBlackList";
            var errorLogBlackList         = CacheHelper.Get(errorLogBlackListCacheKey) as List <TLogsErrorLogBlackList>;

            if (errorLogBlackList == null)
            {
                errorLogBlackList = _errorLogBlackListDao.GetAll();
                CacheHelper.Set(errorLogBlackListCacheKey, errorLogBlackList);
            }

            if (errorLogBlackList.HasValue())
            {
                var isMatchBlackList = IsMatchErrorLogBlackList(request, errorLogBlackList);
                if (isMatchBlackList)
                {
                    result.ReturnCode = ReturnCodeType.Success;
                    result.Content    = true;
                    return(result);
                }
            }

            //EmitMapper对象映射
            var mapper = ObjectMapperManager.DefaultInstance.GetMapper <AddErrorLogRequest, TLogsErrorLog>();
            var item   = mapper.Map(request);

            var rs = _errorLogDao.Insert(item);

            if (rs == true)
            {
                result.ReturnCode = ReturnCodeType.Success;
                result.Content    = true;
            }

            return(result);
        }
示例#2
0
        /// <summary>
        /// 是否匹配黑名单
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private bool IsMatchErrorLogBlackList(AddErrorLogRequest request, List <TLogsErrorLogBlackList> errorLogBlackList)
        {
            //只要任意一个条件匹配即为true
            var message      = request.Message.LZ4Decompress();
            var isMatchRegex = false;

            foreach (var item in errorLogBlackList)
            {
                //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);
        }