コード例 #1
0
ファイル: CustomHandlerError.cs プロジェクト: wyh0395/Berry
        /// <summary>在发生异常时调用。</summary>
        /// <param name="filterContext">操作筛选器上下文。</param>
        /// <exception cref="T:System.ArgumentNullException">
        /// <paramref name="filterContext" /> 参数为 null。</exception>
        public override void OnException(ExceptionContext filterContext)
        {
            var context   = filterContext.HttpContext;
            var exception = filterContext.Exception;

            if (!filterContext.ExceptionHandled)
            {
                LogMessage logMessage = new LogMessage
                {
                    OperationTime   = DateTime.Now,
                    Url             = context.Request.RawUrl,
                    Ip              = context.Request.UserHostAddress,
                    Host            = context.Request.UserHostName,
                    Browser         = context.Request.Browser.Browser,
                    UserAgent       = context.Request.UserAgent,
                    ExceptionInfo   = exception.InnerException == null ? exception.Message : exception.InnerException.Message,
                    ExceptionSource = exception.Source,
                    ExceptionRemark = exception.StackTrace
                };
                string strMessage = LogFormat.ExceptionFormat(logMessage);
                _logHelper.Error(strMessage);

                filterContext.ExceptionHandled = true;
            }

            filterContext.Result = new ContentResult {
                Content = new BaseJsonResult <string> {
                    Status = (int)JsonObjectStatus.Error, Message = exception.Message
                }.TryToJson()
            };

            //base.OnException(filterContext);
        }
コード例 #2
0
        /// <summary>
        /// 写入日志(log4net)
        /// </summary>
        /// <param name="context">提供使用</param>
        private void WriteLog(ExceptionContext context)
        {
            if (context == null)
            {
                return;
            }
            if (OperatorProvider.Provider.IsOverdue())
            {
                return;
            }

            //var log = LogFactory.GetLogger(context.Controller.ToString());
            LogHelper logHelper = new LogHelper(context.Controller.ToString());

            Exception  error      = context.Exception;
            LogMessage logMessage = new LogMessage
            {
                OperationTime = DateTimeHelper.Now,
                Url           = HttpContext.Current.Request.RawUrl,
                Class         = context.Controller.ToString(),
                Ip            = NetHelper.Ip,
                Host          = NetHelper.Host,
                Browser       = NetHelper.Browser,
                UserName      = OperatorProvider.Provider.Current().Account + "(" + OperatorProvider.Provider.Current().UserName + ")"
            };

            logMessage.ExceptionInfo = error.InnerException == null ? error.Message : error.InnerException.Message;
            //logMessage.ExceptionSource = Error.Source;
            //logMessage.ExceptionRemark = Error.StackTrace;
            string strMessage = LogFormat.ExceptionFormat(logMessage);

            logHelper.Error(strMessage);

            //LogEntity logEntity = new LogEntity
            //{
            //    CategoryId = (int)CategoryType.Exception,
            //    OperateTypeId = ((int)OperationType.Exception).ToString(),
            //    OperateType = OperationType.Exception.GetEnumDescription(),
            //    OperateAccount = logMessage.UserName,
            //    OperateUserId = OperatorProvider.Provider.Current().UserId,
            //    ExecuteResult = -1,
            //    ExecuteResultJson = strMessage
            //};
            //logEntity.WriteLog();

            //SendMail(strMessage);
        }
コード例 #3
0
        public Task OnExceptionAsync(ExceptionContext context)
        {
            // 写日志
            var error = context.Exception;

            string errorMsg = error.InnerException != null && string.IsNullOrEmpty(error.InnerException.ToString())
                ? error.Message
                : $"[{error.InnerException?.Message}]{error.Message}";

            //判断是否自定义异常
            if (context.Exception is AppFriendlyException exp)
            {
            }


            var logMessage = new LogMessage
            {
                ExceptionInfo   = errorMsg,
                ExceptionSource = error.Source,
                ExceptionRemark = error.StackTrace,
                OperationTime   = DateTime.Now,
                Url             = null,
                UserName        = null
            };

            var strMsg = LogFormat.ExceptionFormat(logMessage);

            // 配置 Serilog
            Log.Logger = new LoggerConfiguration()
                         // 最小的日志输出级别
                         .MinimumLevel.Error()
                         .Enrich.FromLogContext()
                         // 配置日志输出到控制台
                         .WriteTo.Console(
                outputTemplate:
                "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}")
                         // 配置日志输出到文件,文件输出到当前项目的 logs 目录下
                         // 日记的生成周期为每天
                         .WriteTo.File(Path.Combine("logs", DateTime.Now.ToString("d"), @"log-error.txt"),
                                       Serilog.Events.LogEventLevel.Error, rollingInterval: RollingInterval.Day,
                                       rollOnFileSizeLimit: true)
                         // 创建 logger
                         .CreateLogger();
            Log.Logger.Error(strMsg);
            return(Task.CompletedTask);
        }