在前4篇Log4net入门文章中,我们讲述了log4net的一些简单用法,在这一篇中我们主要讲述如何在ASP.NET MVC 5项目中将日志信息写入SQL Server数据库中。

一、创建最简单的ASP.NET MVC 5应用程序

1、打开VS2015,依次点击【文件】-【新建项目】,创建一个“ASP.NET Web应用程序”,将项目名称命名为“Log4netMVC”,然后点击“确定”按钮。

2、在“选择模板”选项中,我们选择“Empty”模板,在“为以下项添加文件夹和核心引用”选项中勾选“MVC”选项,然后点击“确定”按钮。

3、右击项目中的“Controllers”文件夹,依次点击【添加】-【控制器】,然后选择“MVC 5控制器 - 空”,然后点击“添加”按钮。在弹出的对话框中将控制器名称命名为“HomeController”,然后点击“添加”按钮。

4、双击打开新添加的“HomeController.cs”文件,定位到Index()方法,然后右击该方法名,点击【添加视图】选项,弹出“添加视图”对话框,在该对话框中取消勾选“使用布局页”选项,其他选项保持不变,然后点击“添加”按钮。

5、在Index.cshtml文件中的div元素中添加如下代码:

复制代码
 1 @{
 2     Layout = null;
 3 }
 4 
 5 <!DOCTYPE html>
 6 
 7 <html>
 8 <head>
 9     <meta name="viewport" content="width=device-width" />
10     <title>Index</title>
11 </head>
12 <body>
13     <div> 
14         ASP.NET MVC 5中使用log4net!
15     </div>
16 </body>
17 </html>
复制代码

  至此,最简单的一个ASP.NET MVC 5项目创建完毕,项目结构如下所示:

二、在ASP.NET MVC 5项目中配置log4net

1、依次点击【工具】-【NuGet包管理器】-【管理解决方案的NuGet程序包】,然后点击“浏览”标签页,在搜索中输入“log4net”,然后回车,点击搜索到的“log4net”,然后在右侧勾选“Log4netMVC”,版本选择“最新稳定版2.0.5”,然后点击“安装”按钮,等待安装完毕即可。

2、在Log4netMVC项目中展开“Properties”节点,然后双击打开“AssemblyInfo.cs”文件,在该文件的最后添加以下一行代码:

 1 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4net.config", Watch = true)] 

3、在Log4netMVC项目的根目录下添加一个名为“Log4net.config”的配置文件,注意该配置文件的名称与第2步中的“ConfigFile”的值一致。将Log4net.config文件配置如下:

复制代码
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3   <configSections>
 4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
 5   </configSections>
 6   
 7   <system.web>
 8     <compilation debug="true" targetFramework="4.5.2" />
 9     <httpRuntime targetFramework="4.5.2" />
10   </system.web>
11 
12   <log4net>
13     <!-- 将日志利用ADO.NET记录到数据库中 -->
14     <appender name="AdoNetAppender_SQLServer" type="log4net.Appender.AdoNetAppender">
15       <!-- 缓冲区大小 -->
16       <bufferSize value="1" />
17       <!-- 引用信息 -->
18       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
19       <!-- 连接到SQL Server的数据库连接字符串 -->
20       <connectionString value="Data Source=(local); Initial Catalog=Management; User ID=sa; Password=123456;" />
21       <!-- 插入Log表的SQL语句 -->
22       <commandText value="INSERT INTO dbo.Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
23 
24       <parameter>
25         <parameterName value="@log_date" />
26         <dbType value="DateTime" />
27         <layout type="log4net.Layout.RawTimeStampLayout" />
28       </parameter>
29 
30       <parameter>
31         <parameterName value="@thread" />
32         <dbType value="String" />
33         <size value="255" />
34         <layout type="log4net.Layout.PatternLayout">
35           <conversionPattern value="%thread" />
36         </layout>
37       </parameter>
38 
39       <parameter>
40         <parameterName value="@log_level" />
41         <dbType value="String" />
42         <size value="50" />
43         <layout type="log4net.Layout.PatternLayout">
44           <conversionPattern value="%level" />
45         </layout>
46       </parameter>
47 
48       <parameter>
49         <parameterName value="@logger" />
50         <dbType value="String" />
51         <size value="255" />
52         <layout type="log4net.Layout.PatternLayout">
53           <conversionPattern value="%logger" />
54         </layout>
55       </parameter>
56 
57       <parameter>
58         <parameterName value="@message" />
59         <dbType value="String" />
60         <size value="4000" />
61         <layout type="log4net.Layout.PatternLayout">
62           <conversionPattern value="%message" />
63         </layout>
64       </parameter>
65 
66       <parameter>
67         <parameterName value="@exception" />
68         <dbType value="String" />
69         <size value="2000" />
70         <layout type="log4net.Layout.ExceptionLayout" />
71       </parameter>
72     </appender>
73 
74     <root>
75       <!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
76       <!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
77       <!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
78       <level value="ALL" />
79       <!-- 将日志利用ADO.NET记录到数据库中 -->
80       <appender-ref ref="AdoNetAppender_SQLServer" />
81     </root>
82   </log4net>
83 </configuration>
复制代码

4、双击打开“Log4netMVC”根目录下的Global.asax文件,然后在Application_Start()方法中添加一行代码,最终代码如下所示:

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 using System.Web.Routing;
 7 
 8 namespace Log4netMVC
 9 {
10     public class MvcApplication : System.Web.HttpApplication
11     {
12         protected void Application_Start()
13         {
14             AreaRegistration.RegisterAllAreas();
15             RouteConfig.RegisterRoutes(RouteTable.Routes);
16 
17             log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("Log4net.config")));
18         }
19     }
20 }
复制代码

5、双击打开“HomeController.cs”文件,编辑代码如下所示:

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace Log4netMVC.Controllers
 8 {
 9     public class HomeController : Controller
10     {
11         private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
12 
13         // GET: Home
14         public ActionResult Index()
15         {
16             log.Info("ASP.NET MVC Info!");
17             return View();
18         }
19     }
20 }
复制代码

三、创建数据库以及日志表

  首先,我们在SQL Server中创建一个名为“Management”的数据库,然后在该数据库中创建一个名为“Log”的表,该表结构如下所示:

复制代码
 1 CREATE TABLE [dbo].[Log](
 2     [Id] [int] IDENTITY(1,1) NOT NULL,
 3     [Date] [datetime] NOT NULL,
 4     [Thread] [varchar](255) NOT NULL,
 5     [Level] [varchar](50) NOT NULL,
 6     [Logger] [varchar](255) NOT NULL,
 7     [Message] [varchar](4000) NOT NULL,
 8     [Exception] [varchar](2000) NULL,
 9  CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED 
10 (
11     [Id] ASC
12 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
13 ) ON [PRIMARY]
复制代码

  至此,所有准备工作以及配置工作全部完成,运行该ASP.NET MVC 5应用程序,即可看到日志成功写入到SQL Server数据库。

  源码下载

 

https://www.cnblogs.com/yonghuacui/p/6179987.html