ASP.NET MVC5 之 Log4Net 的学习和使用

最近在学习 log4Net 插件,在博客园找到了好多资料,但是实现起来还是有点麻烦。

现在记录下学习的过程,期间可能加载着借鉴和转载的代码。

1.配置文件的设置:

新建config文件夹下 log4net.config文件,代码如下:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <!--Log4net Begin by Tony  2008.11.20-->
  <log4net>
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
      <!--示是记录10 条到缓冲区,满10条后再写入SQL server-->
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="DATABASE=Log4Net;SERVER=.;UID=sauser;PWD=sqlPassword123_;Connect Timeout=15;" />
      <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="100" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%t" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="200" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%p" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="500" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="3000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%m" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>
    <!-- setup the root category, add the appenders and set the default level -->
    <root>
      <level value="WARN"/>
      <level value="INFO"/>
      <level value="DEBUG"/>
      <level value="FINE"/>
      <appender-ref ref="ADONetAppender" />
    </root>
    <!-- specify the level for some specific categories -->
    <logger name="iNotes">
      <level value="WARN"/>
      <level value="INFO"/>
      <level value="DEBUG"/>
      <level value="FINE"/>
      <appender-ref ref="ADONetAppender"/>
    </logger>
    <logger name="StellaLogger">
      <level value="ALL"/>
      <appender-ref ref="AdoNetAppender" />
    </logger>
  </log4net>
  <!--Log4net End-->
</configuration>

2.数据库Sql语句

USE [Log4Net] GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[ErrorLog](

 [nId] [bigint] IDENTITY(1,1) NOT NULL,

 [dtDate] [datetime] NOT NULL,

 [sThread] [varchar](100) NOT NULL,  

[sLevel] [varchar](200) NOT NULL,

 [sLogger] [varchar](500) NOT NULL,  

[sMessage] [varchar](3000) NOT NULL,

 [sException] [varchar](4000) NULL ) ON [PRIMARY]

GO

SET ANSI_PADDING OFF GO

3.AssemblyInfo.cs 文件

添加

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Config\log4net.config", Watch = false)]

4.FilterConfig.cs

  public static void RegisterGlobalFilters(GlobalFilterCollection filters)        

{            

           filters.Add(new HandleErrorAttribute());                       

             //注册错误过滤器            

             filters.Add(new MyDealExceptionFileAttribute());

}

5.新建MyLogHelper.cs 文件

  public class MyLogHelper    

  {        

       public static void WriteLog(string txt)      

      {            

              ILog log = LogManager.GetLogger("log4netlogger");       

              log.Error(txt);

        }

    }

6.新建MyDealExceptionFileAttribute .cs

    public class MyDealExceptionFileAttribute : HandleErrorAttribute  

   {        

            public override void OnException(ExceptionContext filterContext)        

            {          

                    base.OnException(filterContext);             //处理错误消息,将其跳转到一个页面           

                   MyLogHelper.WriteLog(filterContext.Exception.ToString());             //页面跳转到错误页面                               

                  filterContext.HttpContext.Response.Redirect("/Error.html");       

            }

   }

6.HomeController.cs 控制器下代码

      public ActionResult Index()
        {
            try
            {
                int a = 0;
                int b2 = 1;
                int c = b2 / a;
            }
            catch (Exception ex)
            {
                log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
                 myLogger.Error("错误的测试", ex);  
            }
            return View();
        }

7.Global.asax  文件配置

  log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("config\log4net.config"));

借鉴URL:

http://kb.cnblogs.com/page/76919/

http://www.cnblogs.com/huanghai223/archive/2012/02/21/2361529.html

http://myx.cnblogs.com/iaxes/articles/Log4net.html