Log4net是一款非常好用、强大的开源日志记录组件,它来自于著名的Apache。起初是log4j专用于Java,后来又提供了log4net用于支持.NET。帮助.NET程序员也能够轻松的处理日志信息。
log4net是一个“库”,用于帮助程序员输出日志到大量不同的输出目标(文件、控制台、不同的数据库、甚至内存等等)。可以在这里下载到它的最新版本。
好,下面进入正题,在C#当中如何利用好这个“著名”的日志组件呢?
我们可以按照下面的步骤来创建一个控制台项目来利用log4net进行日志的记录:
1、创建一个控制台项目,并添加log4net.dll引用
log4net.dll,这个文件可以从下载的包中找到。在创建好的控制台项目中,直接添加引用这个文件就可以了。
2、创建一个log4net.config文件,用于单独的进行log4net日志信息的配置
配置文件是核心,它记录了日志的详细的配置情况。log4net继承了Java的优点,能够以灵活的配置方式,将日志信息输出到不同的数据源。
下面展示了一个完整的log4net.config文件:
上面我直接引用了官方的配置示例。可以在这里找到:。这里面有各种目标数据源的配置示例,非常全面。
3、建立一个类Logger,用于进行日志的记录
在建好的Logger类中,添加如下代码:
//如果是winform或console等c/s程序,需要设置一下。//具体步骤:右键log4net.config文件-属性-复制到输出目录:始终复制。目的是为了每次启动时能够找到这个config文件[assembly: log4net.Config.XmlConfigurator(Watch = true, ConfigFile = "log4net.config")]namespace Log4net{ ////// 日志记录类 /// public class Logger { #region 记录日志 ////// 记录日志 /// /// 日志级别 /// 日志内容 public static void LoggerMsg(LogLevel legLevel, string msg) { log4net.ILog log = GetLogger(); switch (legLevel) { case LogLevel.Debug: log.Debug(msg); break;//Debug case LogLevel.Error: log.Error(msg); break;//Error case LogLevel.Fatal: log.Fatal(msg); break;//Fatal case LogLevel.Info: log.Info(msg); break;//Info case LogLevel.Warn: log.Warn(msg); break;//Warn default: break; } } #endregion #region 获得一个日志记录对象 ////// 获得一个日志记录对象 /// ///日志记录对象 public static log4net.ILog GetLogger() { //MethodBase.GetCurrentMethod().DeclaringType 返回:命名空间名+类名 return log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); } #endregion } ////// 日志记录级别 /// public enum LogLevel { Debug, Info, Warn, Error, Fatal, }}
这里强调的是,一定要在命名空间上面加上:[assembly: log4net.Config.XmlConfigurator(Watch = true, ConfigFile = "log4net.config")]。并且如果你的是c/s项目,比如控制台、winform等程序,则必须要右键log4net.config文件-属性-复制到输出目录:改为始终复制。这样程序加载时才能找到这个log4net.config,才能进行日志的记录。
4、在控制台Main方法中进行测试
好了,最后一步,就是对上述的配置进行测试了。我们在Main方法中加上如下测试代码。
//主方法测试用Logger.LoggerMsg(LogLevel.Info, "hello,log4net!");
运行这个控制台,程序正常执行。
上面我演示了将日志记录输出到文件、Sql Server数据库、Oracle数据库、Access数据库等四种情况。如果有更多的其它数据源的输出,可以参考官方网站: 。
最后看下执行的结果:
txt:
access:
sqlserver 2008:
oracle 10g: