關於Log4Net的應用,網上有很多教程,但大多數都是拷貝復制,有些按照他的代碼來,運行起來發現也出不來效果,但是Log4net的作用實在是非常大的,或者這里說的不對,應該說系統的日志功能是很重要的也很有必要的,當然設置系統的時候完全可以自己來開發一個日志功能,不外乎就是寫日志到文件或者數據庫中等等,如果寫日志到數據庫中,那么就需要使用ADO了,如果是三層架構的,那么這個日志添加就不能再任何地方都可以隨便添加了,但是Log4net可以做到獨立的鏈接數據庫,並且在系統的任何地方都能夠使用。
01 我們先添加一個簡單的asp.net web項目
我們再添加一個common的類庫,這個類庫是一些公共的工具類
在添加一個Business的類庫,這個類庫主要是業務邏輯層的,我這里主要是為了測試在系統任何地方都能調用數據庫,所以才創建這些類庫
創建后的項目如下:

02 引入log4net.dll的引用,可以在下方的源碼中找到,我們在common中引入這個dll
03 我們創建一個數據庫,這里面你可以使用你已經創建好的數據庫,我這里創建一個名Log4NetDB的數據庫
添加,一張數據表Log,sql代碼如下
if exists (select 1 from sysobjects where id = object_id('Log') and type = 'U') drop table Log go /*==============================================================*/ /* Table: Log */ /*==============================================================*/ create table Log ( Id bigint identity, AddTime datetime not null, Thread nvarchar(100) not null, Level nvarchar(200) not null, Logger nvarchar(500) not null, Message nvarchar(3000) not null, Exception nvarchar(4000) null, constraint PK_LOG primary key (Id) ) go declare @CurrentUser sysname select @CurrentUser = user_name() execute sp_addextendedproperty 'MS_Description', 'Log4net日志表', 'user', @CurrentUser, 'table', 'Log' go declare @CurrentUser sysname select @CurrentUser = user_name() execute sp_addextendedproperty 'MS_Description', '日志主鍵', 'user', @CurrentUser, 'table', 'Log', 'column', 'Id' go declare @CurrentUser sysname select @CurrentUser = user_name() execute sp_addextendedproperty 'MS_Description', '添加時間', 'user', @CurrentUser, 'table', 'Log', 'column', 'AddTime' go declare @CurrentUser sysname select @CurrentUser = user_name() execute sp_addextendedproperty 'MS_Description', '所在線程', 'user', @CurrentUser, 'table', 'Log', 'column', 'Thread' go declare @CurrentUser sysname select @CurrentUser = user_name() execute sp_addextendedproperty 'MS_Description', '級別', 'user', @CurrentUser, 'table', 'Log', 'column', 'Level' go declare @CurrentUser sysname select @CurrentUser = user_name() execute sp_addextendedproperty 'MS_Description', '擁有者', 'user', @CurrentUser, 'table', 'Log', 'column', 'Logger' go declare @CurrentUser sysname select @CurrentUser = user_name() execute sp_addextendedproperty 'MS_Description', '日志信息', 'user', @CurrentUser, 'table', 'Log', 'column', 'Message' go declare @CurrentUser sysname select @CurrentUser = user_name() execute sp_addextendedproperty 'MS_Description', '異常信息', 'user', @CurrentUser, 'table', 'Log', 'column', 'Exception' go
04 在log4netdemo主項目根目錄添加一個Log4net.config的配置文件
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> <bufferSize value="1" /> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <!--數據庫連接字符串--> <connectionString value="DATABASE=Log4NetDB;SERVER=.;UID=sa;PWD=pwdpwd;Connect Timeout=15;" /> <commandText value="INSERT INTO Log ([AddTime],[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="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> <root> <level value="WARN"/> <level value="INFO"/> <level value="DEBUG"/> <level value="FINE"/> <appender-ref ref="ADONetAppender" /> </root> <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> </configuration>
05 在主項目中的AssemblyInfo.cs 添加
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
06 使用的時候,需要先實例化日志對象
比如在page里面
private static log4net.ILog logHelper = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); protected void Page_Load(object sender, EventArgs e) { //項目中調用使用日志 logHelper.Info("hehe"); }
在common里面
private static log4net.ILog logHelper = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public static void ComHelperDo() { int i = 0; try { int b = 3 / i; } catch (Exception ex) { logHelper.Error("發現異常", ex); } }
在business里
private static log4net.ILog logHelper = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public static void BusHelperDo() { logHelper.Error("錯誤信息"); }
最后數據庫里就添加成功了

需要用到日志的項目就需要引入log4net的dll
用起來也挺方便的
感謝你的閱讀,希望對你有幫助,歡迎關注作者的個人主頁
www.bamn.cn 希望博客園允許打一點點廣告....