昨晚上传查看了下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" >
即可。。
经过昨晚的查看资料和今天的测试发现,没有那么复杂。。