在前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數據庫。
源碼下載