欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ASP.NET Mvc中异常日志记录

程序员文章站 2022-03-05 12:04:41
...

1.首先在项目文件夹的packages文件夹下创建文件夹Log4net,将从网上下载的log4net.dll文件以及Log4net.xml文件放入到创建的Log4Net文件夹目录下。

2.在项目中添加对log4net.dll文件的引用。并在Global.asax类中的Application_Start方法中添加代码并引入命名空间using log4net

 log4net.Config.XmlConfigurator.Configure();

3. 在webConfig.xml文件中的configSections节点下添加代码:

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

紧接着在configSections的结束标签后添加代码

 

  <log4net>
    <!-- Define some output appenders -->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <file value="C:\test.txt"/>
      <!--是否向文件中追加日志-->
      <appendToFile value="true"/>
      <!--日志保留天数-->
      <maxSizeRollBackups value="10"/>
      <!--每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志-->
      <maximumFileSize value="1024KB"/>
      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <rollingStyle value="Size"/>
      <!--否只写到一个文件中-->
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger  操作者ID:%property{Operator} 操作类型:%property{Action}%n    当前机器名:%property%n当前机器名及登录用户:%username %n    记录位置:%location%n 消息描述:%property{Message}%n     异常:%exception%n 消息:%message%newline%n%n-->
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
  </log4net>

本文只配置了这几个

4.在MVC项目中的Model文件夹中添加MyExceptionFilter.cs类,使其继承于HandleErrorAttribute并重写这个方法

public override void OnException(ExceptionContext filterContext)
{}

5.创建类库Common在类库中添加Log4netWriter以及ILog4netWriter接口在ILog4net中添加方法,logWriter代码如下

  void logWriter(string txt);

Log4netWriter继承接口ILog4netWriter接口实现此方法:代码如下

  public void Witerloginfo(string txt)
        {
            ILog log = log4net.LogManager.GetLogger("异常记录");
            log.Error(txt);
        }

再添加Log4netHelper类代码如下:

  public static Queue<string> Exceptionstr = new Queue<string>();

        public static List<ILog4netWriter> list = new List<ILogWriter>();
        static Log4netHelper()
        {
           list.Add(new Log4netWriter());
            ThreadPool.QueueUserWorkItem(O =>
            {
                while (true)
                {
                    lock (Exceptionstr)
                    {
                        if (Exceptionstr.Count > 0)
                        {
                            string str = Exceptionstr.Dequeue();

                            foreach (var item in list)
                            {
                                item.Witerloginfo(str);

                            }
                        }
                    }
                }
            });
        }

        public static void Wirterlog(string txt)
        {
            lock (Exceptionstr)
            {
                Exceptionstr.Enqueue(txt);
            }
        }
    }

6.在第四步骤重写的方法中添加代码:

  base.OnException(filterContext);
            LogHelper.Wirterlog(filterContext.Exception.ToString());
        

7.在项目的App_Start文件夹目录下的FilterConfig.cs类中将 filters.Add(new HandleErrorAttribute)改为filters.Add(new MyExceptionFilter());

相关标签: MVC