/// <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); }
/// <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); }
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); }