参考博客:https://www.cnblogs.com/WJ--NET/p/7878286.html
关于日志的过滤:
AuthExceptionFilter.cs: using FirstDemo.Models; using Newtonsoft.Json; using System.Net.Http; using System.Text; using System.Web.Http.Filters; namespace FirstDemo.Filter { /// <summary> /// 设置过滤器 /// </summary> public class AuthExceptionFilter:ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext actionExecutedContext) { //base.OnException(actionExecutedContext); // 返回500状态码,表示服务器发生错误 actionExecutedContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.InternalServerError); // 设置返回消息 string l_strMsg = JsonConvert.SerializeObject(new ResultModel<object>() { ReturnCode = 0, Message = "处理异常", Result = "" }); // 写入日志 LogModel.WriteLogError(l_strMsg); // 返回结果 actionExecutedContext.Response.Content = new StringContent(l_strMsg, Encoding.UTF8); } } }
控制器 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using FirstDemo.Entity; using FirstDemo.Models; using System.Data; using Newtonsoft.Json; using FirstDemo.Filter; namespace FirstDemo.Controllers { [AuthExceptionFilter] public class IndexController : ApiController { #region get请求,获取页面数据 [HttpGet] public HttpResponseMessage Get() { try { throw new Exception("模拟错误"); } catch(Exception err) { throw (err); } ... } #endregion } }
日志Model: using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace FirstDemo.Models { public static class LogModel { private static readonly log4net.ILog m_logger = log4net.LogManager.GetLogger("LogModel"); public static void WriteLogError(string a_strMsg) { m_logger.Error(a_strMsg); } } }
响应信息model: using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace FirstDemo.Models { public class ResultModel<T> where T :class { // 状态码 public int ReturnCode { get; set; } // 附加消息 public string Message { get; set; } // 附加数据 public T Result { get; set; } } }
Log4net.config: <?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.5.2" /> <httpRuntime targetFramework="4.5.2" /> </system.web> <log4net> <!--记录所有的完整日志--> <appender name="AllLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--或者是文件名或是文件夹(没有后缀)--> <file value="log/all/log_" /> <!--是否总是写在一个文件里--> <staticLogFileName value="false" /> <!-- 是否追加到文件中 --> <appendToFile value="true" /> <!--可设置为Size、Date,即大小/日期超出一定范围后就新建一个日志文件--> <rollingStyle value="Date" /> <!--一天最多保存多少--> <maxSizeRollBackups value="50" /> <!--每个文件最大大小,单位可是MB,KB--> <maximumFileSize value="5MB" /> <!--设置用来生产文件的日期格式--> <datePattern value="yyyy-MM-dd'.log'"/> <!--日志输入的通用格式(日志的内容格式)--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter,log4net"> <levelMin value="DEBUG" /> <levelMax value="FATAL" /> </filter> </appender> <!--记录错误日志,这些错误往往是一个程序bug或是要注意的--> <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--或者是文件名或是文件夹(没有后缀)--> <file value="log/error/error_" /> <!--是否总是写在一个文件里--> <staticLogFileName value="false" /> <appendToFile value="true" /> <!--可设置为Size、Date,即大小/日期超出一定范围后就新建一个日志文件--> <rollingStyle value="Date" /> <!--一天最多保存多少--> <maxSizeRollBackups value="50" /> <!--每个文件最大大小,单位可是MB,KB--> <maximumFileSize value="5MB" /> <!--设置用来生产文件的日期格式--> <datePattern value="yyyy-MM-dd'.log'"/> <!--日志输入的通用格式(日志的内容格式)--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter,log4net"> <levelMin value="ERROR" /> <levelMax value="FATAL" /> </filter> </appender> <!--Set root logger level to DEBUG and its only appender to A1--> <root> <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF--> <level value="ALL" /> <appender-ref ref="AllLogFileAppender" /> <appender-ref ref="ErrorLogFileAppender" /> </root> </log4net> </configuration>
action过滤器:
ActionFilter.cs过滤器 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http.Controllers; using System.Web.Http.Filters; namespace FirstDemo.Filter { public class ActionFilter:ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext actionContext) { //base.OnActionExecuting(actionContext); // 添加在方法执行前需要处理的代码 } public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { //base.OnActionExecuted(actionExecutedContext); // 添加在方法执行后需要处理的代码 } } }
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using FirstDemo.Entity; using FirstDemo.Models; using System.Data; using Newtonsoft.Json; using FirstDemo.Filter; namespace FirstDemo.Controllers { [ActionFilter] // 添加action过滤器 [AuthExceptionFilter] public class IndexController : ApiController { #region get请求,获取页面数据 [HttpGet] public HttpResponseMessage Get() { } #endregion } }
///