Log4net輸出資訊到RichTextBox

NO IMAGE

 

昨晚上傳檢視了下log4net,因為之前是做java對這個元件的使用比較熟悉,還沒擴充套件過。但是一個小專案需要,實現了對log4net的改寫,讓log4net輸出日誌訊息到自己想輸出的地方。
先說下log4net的使用,再說對log4net重寫,實現讓日誌訊息列印到我們想要的地方。
1:log4net的使用:
A:下載incubating-log4net-1.2.10.zip,解壓,找到bin\net\2.0\release\log4net.dll(對於.net framework2.0的平臺),讓你的winform工程引入這個dll。
B:1)在你的winform工程主目錄下建立檔案App.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="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c:%L]:%m%n" />
</layout>
</appender>
</log4net>
</configuration>

2)在你的工程下的Properties下的AssemblyInfo.cs最下面一行新增程式碼:

// 新增log4net日誌支援
[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = “config”, Watch = true)]

C:我在form的onLoad事件中新增了如下測試程式碼:
// test for log4net
ILog log = LogManager.GetLogger(this.GetType());
log.Info(“test”);
D:執行該程式,可以在.exe程式的同級目錄下找到檔案log-file.txt,內容為text。
至此,log4net的簡單使用已經ok。

2:擴充套件log4net,讓日誌輸出到我們想要的地方,其實log4net自帶了很多輸出到不同地方的Appender,但是我這裡的需求,系統還是預設沒有滿足我,我想讓日誌顯示在RichTextBox中,下面看我的改寫:
A:建立自己的Log類,繼承log4net的AppenderSkeleton類,只需要過載其Append方法即可,下面看程式碼:

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using log4net.Appender;
using log4net.Filter;
using log4net.Util;
using log4net.Layout;
using log4net.Core;
namespace PostApplication.core.util
{
class Log : AppenderSkeleton
{
override protected void Append(LoggingEvent loggingEvent)
{
StringWriter writer = new StringWriter();
this.Layout.Format(writer, loggingEvent);
// 已經得到了按照自己設定的格式的日誌訊息內容了,就是writer.toString()。然後你想把這句話顯示在哪都可以了。。我是測試就直接控制檯了。
Console.Write(writer.ToString());
}
}
}

 

B:修改App.config的<appender name=”LogFileAppender” type=”log4net.Appender.FileAppender” > 為 <appender name=”LogFileAppender” type=”PostApplication.core.util.Log” >
即可。。

經過昨晚的檢視資料和今天的測試發現,沒有那麼複雜。。