log4net的全局异常的配置

1、首先使用nuget,为项目添加log4net



2、配置log4net

(1)App_Start文件目录下,新增Log4netRegister.cs文件:

 public class Log4netRegister
    {
        public static void Register()
        {
            var path = HttpContext.Current.Server.MapPath("~/Log4net/Log4net.config");
            log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(path));
        }
    }

(2)根据在相应目录添加,log4net..config文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <log4net>
    <root>
      <appender-ref ref="LogFileAppender" />
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!-- 日志记录路径,此处为相对路径,即站点根目录 -->
      <file value="Log4net/Log4netFile.txt" />
      <!-- 日志记录方式,此处为追加模式 -->
      <appendToFile value="true" />
      <!-- 日志文件滚动模式,此处定义为复杂模式 -->
      <rollingStyle value="Composite" />
      <!-- 日志文件名规则,结合上一点配合使用,最终日志文件为logs\ERROR\2013\201309\20130927.log -->
      <datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.log'" />
      <!-- 如下参数可直接使用,就不多做阐述,主要是上面的参数,其他教程没有 -->
      <staticLogFileName value="false"/>
      <maxSizeRollBackups value="100" />
      <maximumFileSize value="10MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ERROR"/>
        <param name="LevelMax" value="ERROR"/>
      </filter>
    </appender>
  </log4net>
</configuration>

3、App_Start文件目录下,新增WebApiExceptionFilterAttribute类,用来重写ExceptionFilterAttribute的OnException方法:

public class WebApiExceptionFilterAttribute : ExceptionFilterAttribute
    {
        //重写基类的异常处理方法
        private ILog log = LogManager.GetLogger("BookingWebApi");

        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            //1.异常日志记录(正式项目里面一般是用log4net记录异常日志)
            log.Error(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "——" +
                actionExecutedContext.Exception.GetType().ToString() + ":" + actionExecutedContext.Exception.Message + "——堆栈信息:" +
                actionExecutedContext.Exception.StackTrace);
       
            //2.返回调用方具体的异常信息
            if (actionExecutedContext.Exception is NotImplementedException)
            {
                actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
            }
            else if (actionExecutedContext.Exception is TimeoutException)
            {
                actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.RequestTimeout);
            }
            //.....这里可以根据项目需要返回到客户端特定的状态码。如果找不到相应的异常,统一返回服务端错误500
            else
            {
                actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError);
            }

            base.OnException(actionExecutedContext);
        }

4、在WebApiConfig中添加filter处理

5、查看效果:

故意写错如下:


即可在相应文件下看到,我们的异常信息:


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值