在ASP.Net2.0中使用Log4Net
最後更新:2018-12-07
來源:互聯網
上載者:User
第一種方法 在web.config中寫設定檔
Log4Net首頁: http://logging.apache.org/log4net/,下載Log4Net
Log4Net主要由Logger, Appender, Filter, Layout 4個組件構成, 一般情況下後3個組件在設定檔中配置.
Logger
負責產生日誌訊息,可以在代碼中調用
Appender
負責向儲存介質中追加日誌, 一般在設定檔中配置,根據儲存日誌介質的不同Appender有多種, 比如:AdoNetAppender,EventLogAppender,RollingFileAppender等.參見: http://logging.apache.org/log4net/release/config-examples.html.
Filter
負責過濾日誌, 一般和Appender聯合使用,在設定檔中配置
Layout
負責日誌訊息的格式, 一般和Appender聯合使用,在設定檔中配置。
使用步驟
1.給web項目添加引用log4net.dll
2. 在web.config的configuration(最頂層)下加 (網上文章是把log4net放到configSections前面,但是我編譯不通過)
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<root></root>
<logger name="Test">
<level value="DEBUG" />
<appender-ref ref="rollingFile" />
</logger>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" type="" value="log/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header-------------------------- " />
<param name="Footer" value=" ----------------------footer-------------------------- " />
</layout>
</appender>
</log4net>
Logger的Level屬性可以設以下值,由高到低為OFF,FATAL, ERROR,WARN,INFO,DEBUG,ALL. 高於設定值方法都能寫入日誌, Off所有的寫入方法都不寫到日誌裡,ALL則相反。例如當我們設成Info時,logger.Debug就會被忽略而不寫入檔案,但是FATAL, ERROR,WARN,INFO會被寫入,因為他們等級高於INFO;
3. 在Global.ascx(如果項目中沒有,則建立)中的Application_Start方法中加入
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
log4net.Config.XmlConfigurator.Configure();
}
4.配置<log4net>標籤中的內容
<log4net>
<root>
<!--
<level value="ALL" />
<appender-ref ref="rootFile" />
-->
</root>
<logger name="Test">
<level value="DEBUG" />
<appender-ref ref="rollingFile" />
</logger>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" type="" value="log/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header-------------------------- " />
<param name="Footer" value=" ----------------------footer-------------------------- " />
</layout>
</appender>
</log4net>
log4net標籤的架構如下, 該標籤下有root, logger, appender等標籤
root標籤
所有的logger都從root繼承, root本身也是一個logger
logger標籤
每個logger標籤代表一個logger,appender-ref表示該logger產生的日誌訊息傳遞給哪個appender,一個logger可以把相同的訊息傳遞給多個appender記錄
appender標籤
每個appender表示一個日誌的儲存位置,name不能和type一樣
類型是RollingFileAppender
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" value="log" /> 檔案名稱以log為開頭
<param name="AppendToFile" value="true" /> 是否是向檔案中追加日誌
<param name="RollingStyle" value="Date" /> 日誌根據日期滾動
<param name="DatePattern" value="yyyyMMdd" /> 記錄檔名格式為: log20071120
<param name="StaticLogFileName" value="false" /> 記錄檔名是否是固定不變的
日誌訊息的格式, 表示換行
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header-------------------------- " />
<param name="Footer" value=" ----------------------footer-------------------------- " />
</layout>
</appender>
訊息模式
%m(message):輸出的日誌訊息,如ILog.Debug(…)輸出的一條訊息
%n(new line):換行
%d(datetime):輸出當前語句啟動並執行時刻
%r(run time):輸出程式從運行到執行到當前語句時消耗的毫秒數
%t(thread id):當前語句所在的線程ID
%p(priority): 日誌的當前優先順序別,即DEBUG、INFO、WARN…等
%c(class):當前日誌對象的名稱
%L:輸出語句所在的行號
%F:輸出語句所在的檔案名稱
%-數字:表示該項的最小長度,如果不夠,則用空格填充
5. 在代碼中調用Logger
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using log4net;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ILog LOGGER = LogManager.GetLogger("Test");
LOGGER.Debug("測試資訊");
}
}
最後,可以在根目錄下找到日誌對應記錄檔。
本例源碼:下載本文源碼
註:本文參考部落格園的相關文章,我用的是vs2008,但類庫選得是.net framework2.0.
另記:做執行個體10分鐘就完成了,這麼短的文章我卻編排了幾個小時,到最後才勉強差人意,真不知寫了那麼多的文章的人是怎麼堅持下去的。
(二)使用單獨的設定檔,不放在web.config裡
1.建立一website.
2.添加一個類庫工程,取名LogNet
3. 為LogNet工程引用log4net.dll
4. 雙擊開啟AssemblyInfo.cs在最後添加
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]5. 為LogNet工程添加一個logBLL.cs檔案,我們把日誌調用封裝到這一層
using System;
using System.Collections.Generic;
using System.Text;
namespace LogNet
{
public class LogBLL
{
public static void debug(string message)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsDebugEnabled)
{
log.Debug(message);
}
log = null;
}
public static void error(string message)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsErrorEnabled)
{
log.Error(message);
}
log = null;
}
public static void fatal(string message)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsFatalEnabled)
{
log.Fatal(message);
}
log = null;
}
public static void info(string message)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsInfoEnabled)
{
log.Info(message);
}
log = null;
}
public static void warn(string message)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsWarnEnabled)
{
log.Warn(message);
}
log = null;
}
}
}
6.在web網站根目錄下添加一個log4net.config檔案,內容如下
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<root>
<!--
<level value="ALL" />
<appender-ref ref="rootFile" />
-->
</root>
<logger name="Test">
<level value="DEBUG" />
<appender-ref ref="rollingFile" />
</logger>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" type="" value="log/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header-------------- " />
<param name="Footer" value=" ----------------------footer-------------- " />
</layout>
</appender>
</log4net>
</configuration>
7.編譯LogNet工程
8.為web引入LogNet工程bin目錄下的LogNet.dll
9.在default.aspx.cs裡寫入如下代碼
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using LogNet; //引用程式集
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
LogBLL.debug("測試資訊");
}
}
}
10.運行,將在web目錄下的log目錄下看到記錄檔
----------------------header--------------------------
2007-11-24 12:16:24,171 [4] DEBUG LiveBookings - 測試資訊
2007-11-24 12:16:46,312 [4] DEBUG LiveBookings - 測試資訊
----------------------footer--------------------------