下載與.netframework版本向對應的log4net.dll ,然后添加引用。下載地址:http://logging.apache.org/log4net/download_log4net.cgi
下載:log4net-2.0.8-bin-newkey.zip,然后找到對應的版本的DLL.
1.新建一個空的mvc4應用項目。
2.新建一個log4net.config配置文件,數據庫的連接字符串改一下。
<?xml version="1.0" encoding="utf-8" ?> <log4net> <!--定義輸出到文件中--> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--定義文件存放位置--> <file value="log\\"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'"/> <staticLogFileName value="false"/> <param name="MaxSizeRollBackups" value="1000"/> <layout type="log4net.Layout.PatternLayout"> <!--輸出格式--> <conversionPattern value="%newline %n記錄時間:%date %n線程ID:[%thread] %n日志級別:%-5level %n出錯類:%logger property: [%property{NDC}] - %n錯誤描述:%message%newline"/> </layout> </appender> <!--定義輸出到SQL Server數據庫中--> <!-- 在SQL Server中創建表的SQL語句 CREATE TABLE [dbo].[Log] ( [Id] [int] IDENTITY (1, 1) NOT NULL, [Date] [datetime] NOT NULL, [Thread] [varchar] (255) NOT NULL, [Level] [varchar] (50) NOT NULL, [Logger] [varchar] (255) NOT NULL, [Message] [varchar] (4000) NOT NULL, [Exception] [varchar] (2000) NULL ); --> <appender name="AdoNetAppenderSQLServer" type="log4net.Appender.AdoNetAppender"> <bufferSize value="1" /> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="Data Source=LJJ-FF\LJJ;Initial Catalog=TestMvc;User ID=sa;Password=111111" /> <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) 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="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> </layout> </parameter> <parameter> <parameterName value="@log_level" /> <dbType value="String" /> <size value="50" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> </layout> </parameter> <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="4000" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> <parameter> <parameterName value="@exception" /> <dbType value="String" /> <size value="2000" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender> <root> <level value="ALL" /> <!--文件形式記錄日志--> <appender-ref ref="RollingLogFileAppender"/>--> <!--SQL Server數據庫形式記錄日志--> <appender-ref ref="AdoNetAppenderSQLServer"/> </root> </log4net>
3.在web.config中的<configuration>節點下面添加:
<configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections>
4.在Global.asax下面添加下面代碼:
//應用程序啟動時,自動加載配置log4Net XmlConfigurator.Configure();
5.在AssemblyInfo.cs 下面添加代碼:
//[assembly: log4net.Config.XmlConfigurator(Watch = true)] //注意: ConfigFile 可以指定相對路徑 和 絕對路徑。 eg: /log/xxxx.log 或者 d://log//xxxx.log //這句話是把節點單獨拆分成log4net.config,這里像下面這樣寫。 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)] //這個是log4net配置文件節點寫在web.config里面用這句話 //[assembly: log4net.Config.XmlConfigurator(Watch = true)]
6.新建LogHelper類:
using log4net; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Web; namespace MvcLog4netToDataBase { public class LogHelper { /// <summary> /// 調用Log4net寫日志,日志等級為 :錯誤(Error) /// </summary> /// <param name="logContent">日志內容</param> public static void WriteLog(string logContent) { WriteLog(null, logContent, Log4NetLevel.Error); } /// <summary> /// 調用Log4net寫日志 /// </summary> /// <param name="logContent">日志內容</param> /// <param name="log4Level">記錄日志等級,枚舉</param> public static void WriteLog(string logContent, Log4NetLevel log4Level) { WriteLog(null, logContent, log4Level); } /// <summary> /// 調用Log4net寫日志 /// </summary> /// <param name="type">類的類型,指定日志中錯誤的具體類。例如:typeof(Index),Index是類名,如果為空表示不指定類</param> /// <param name="logContent">日志內容</param> /// <param name="log4Level">記錄日志等級,枚舉</param> public static void WriteLog(Type type, string logContent, Log4NetLevel log4Level) { ILog log = type == null ? LogManager.GetLogger("") : LogManager.GetLogger(type); switch (log4Level) { case Log4NetLevel.Warn: log.Warn(logContent); break; case Log4NetLevel.Debug: log.Debug(logContent); break; case Log4NetLevel.Info: log.Info(logContent); break; case Log4NetLevel.Fatal: log.Fatal(logContent); break; case Log4NetLevel.Error: log.Error(logContent); break; } } } /// <summary> /// log4net 日志等級類型枚舉 /// </summary> public enum Log4NetLevel { [Description("警告信息")] Warn = 1, [Description("調試信息")] Debug = 2, [Description("一般信息")] Info = 3, [Description("嚴重錯誤")] Fatal = 4, [Description("錯誤日志")] Error = 5 } }
7.建HomeController
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using log4net; namespace MvcLog4netToDataBase.Controllers { public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { //簡單寫日志 LogHelper.WriteLog("簡單寫日志"); //寫Debug日志 LogHelper.WriteLog("寫Debug日志", Log4NetLevel.Debug); //帶有類型和日志等級的日志,Index 是類名 LogHelper.WriteLog(typeof(HomeController), "帶有類型和日志等級的日志", Log4NetLevel.Info); return View(); } } }
8.建一個Index視圖。
9.運行得出結果: