在以往開發Java專案時,都會以log4j這個功能強大的套件作為程式的日誌管理器,最近開發C#程式時正在苦惱有
沒有類似的套件可供使用,結果就找到for .Net的log4Net,測試了一下其實用法和log4j的差異不大而且也很容易
上手。在開始使用之前要先到Apache網站下載相關資源,並在下載的壓縮檔中找到log4net.dll,之後在寫程式前
由Microsoft VC#的IDE參考到這一個dll檔。以下為程式範例:
Program.cs
using System;
using System.IO;
//log for .NET
using log4net;
using log4net.Config;
namespace SimpleSample
{
class Program
{
//取得日誌記錄物件(ILog)
private static ILog log = LogManager.GetLogger(typeof(Program));
static void Main(String[] args)
{
try
{
//讀取設定檔
XmlConfigurator.Configure(new FileInfo("C:\\log4netconfig.xml"));
//各等級的log顯示,顯示的等級會根據設定檔的設定而不同
//等級: debug < info < warn < error < fatal
log.Debug("這是debug等級");//目前設定檔設定為info,debug等級的log不會輸出
log.Info("這是info等級");
log.Warn("這是warn等級");
log.Error("這是error等級");
log.Fatal("這是fatal等級");
}
catch (Exception e)
{
System.Console.WriteLine(e.Message);
System.Console.WriteLine(e.StackTrace);
}
System.Console.ReadLine();
}
}
}
設定檔 log4netconfig.xml
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<!--
參數設定:
%date 代表日期時間 ex: 2010-07-28 13:22:27,843
%-5level 代表log等級 ex: ERROR
%logger 代表是哪一個類別的logger ex: SimpleSample.Program
%message 代表程式中有使用日誌紀錄物件並呼叫其函式所輸出的訊息(log.Info("這是info等級"))
ex: 這是info等級
%newline 代表輸出一句完整的日誌記錄後,將指標移至下一行
%file 代表程式檔案的完整路徑 ex: C:\Documents and Settings\YiChengHsieh\My Documents\
Visual Studio 2008\Projects\DBConnection\DBConnection\Program.cs
%line 代表程式中有使用日誌紀錄物件並呼叫其函式輸出訊息的那一行 ex: 30
-->
<!--使用Console作為log的輸出媒介,名稱為consoleAppender-->
<appender name="consoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<!--log的輸出格式,其設定可參考檔案開頭的"參數設定"-->
<conversionPattern value="%date %-5level %logger - %message%newline" />
</layout>
</appender>
<!--使用檔案作為log的輸出媒介,名稱為fileAppender-->
<appender name="fileAppender" type="log4net.Appender.RollingFileAppender">
<!--輸出的檔案名稱及路徑-->
<file value="C:/log.txt" />
<!--記錄log到檔案時,是否累加,true表累加,false表不累加-->
<appendToFile value="true" />
<!--
假設在file標籤設定主要操作的日誌檔檔名為log.txt
rollingStyle代表log紀錄的處理方式,此處設定依檔案Size.只要主要操作檔的大小超
過5KB(maximumFileSize),則將資料移至備份檔,且只保留3個備份檔(maxSizeRollBackups,
主要操作檔不含在內),每份備份檔大小5KB(maximumFileSize),且每個備份檔檔名為
log.txt.1,log.txt.2.....,備份檔最後一碼數字越小者,其備份的資料越新
-->
<!--
<rollingStyle value="Size" />
<maximumFileSize value="5KB" />
<maxSizeRollBackups value="3" />
-->
<!--
假設在file標籤設定主要操作的日誌檔檔名為log.txt
rollingStyle代表log紀錄的處理方式,設定Date代表依寫入資料的時間
dataPattern若設定為yyyyMMdd-HHmm,則代表每過一分鐘就會建立一份備份檔,而主要操作檔
log.txt則紀錄現在這一分鐘的log紀錄,若設定yyyyMMdd則代表每一天會建立一份備份檔,而
主要操作檔log.txt則紀錄今天的log紀錄.可參照System.Globalization.DateTimeFormatInfo
類別,找到其他時間的格式設定.
rollingStyle設定為Date且每日備份,其備份檔檔名範例如 log.txt20100728
-->
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<!--
尚有混合的rollingStyle設定(寫入資料時間及檔案大小),此部份可參照
Apache log4net官網>Documentation>Config Examples
-->
<layout type="log4net.Layout.PatternLayout">
<!--log的輸出格式,其設定可參考檔案開頭的"參數設定"-->
<conversionPattern value="%-5level %date %logger (%file:%line) - %message%newline" />
</layout>
</appender>
<!--程式會從這裡開始參照,之後再參照對應的appender tag-->
<root>
<!--輸出log的等級-->
<!--debug < info < warn < error < fatal-->
<!--設定的log等級及其以上的等級才會顯示-->
<level value="info" />
<!--設定標準輸出裝置(Console)及檔案為log的輸出裝置-->
<appender-ref ref="consoleAppender" />
<appender-ref ref="fileAppender" />
</root>
</log4net>
更多有關於設定檔的內容,可參照官方文件
以下為執行結果
Console:
file:
留言列表