本文主要讲述如何构建封装一个日志工具类,以及在该过程中遇到的问题,
关于Log4Net的介绍,就不详细赘述了,更多详细的技术可参考
在我完成本功能的过程中也详细拜读了他的博客,讲解的很详细。接下来我将我自己完成的Log4Net做一个展示。在本系统中,存在一个基础类库存放LogHelper工具类以及其他一些工具类,一个Web项目Zone用于调用Log,输出log信息,其他不相干的就不介绍了。其实该功能是相对来说都大同小异。项目目录如下:
一、引入log4net.dll文件
首先需要在项目中引入log4net,引用->Nuget包管理->搜索log4net->Apache Log4net->安装即可,或直接在项目中引入log4net.dll文件
二、创建log4net的工具类
创建一个类库,Commons类库,创建一个基础类LogHelper,供其他地方调用
具体代码如下:
////// 日志 /// public class LogHelper { //日志级别 private const string ErrorLevel = "Error"; private const string DebugLevel = "Debug"; private const string InfoLevel = "Info"; private const string FatalLevel = "Fatal"; private const string WarningLevel = "Warn"; static LogHelper() { var path = AppDomain.CurrentDomain.BaseDirectory + @"log4net.config"; log4net.Config.XmlConfigurator.Configure(new FileInfo(path)); } #region 获得ILog ////// 根据Log等级获得log /// /// Log等级 ///public static ILog GetLog(string logLevel) { var log = log4net.LogManager.GetLogger(logLevel); return log; } #endregion #region Info 级别的日志 public static void Info(string message) { var log = GetLog(InfoLevel); if (log.IsInfoEnabled) { log.Info(message); } } #endregion #region Info 级别的日志 public static void Info(string message,Exception ex) { var log = GetLog(InfoLevel); if (log.IsInfoEnabled) { log.Info(message,ex); } } #endregion #region Debug 级别的日志 public static void Debug(string message) { var log = GetLog(DebugLevel); if (log.IsDebugEnabled) { log.Debug(message); } } #endregion #region Debug 级别的日志 public static void Debug(string message,Exception ex) { var log = GetLog(DebugLevel); if (log.IsDebugEnabled) { log.Debug(message,ex); } } #endregion #region Error 级别的日志 public static void Error(string message) { var log = GetLog(ErrorLevel); if (log.IsErrorEnabled) { log.Error(message); } } #endregion #region Error 级别的日志 public static void Error(string message,Exception ex) { var log = GetLog(ErrorLevel); if (log.IsErrorEnabled) { log.Error(message,ex); } } #endregion #region Fatal 级别的日志 public static void Fatal(string message) { var log = GetLog(FatalLevel); if (log.IsFatalEnabled) { log.Fatal(message); } } #endregion #region Fatal 级别的日志 public static void Fatal(string message,Exception ex) { var log = GetLog(FatalLevel); if (log.IsFatalEnabled) { log.Fatal(message,ex); } } #endregion #region Warn 级别的日志 public static void Warning(string message) { var log = GetLog(WarningLevel); if (log.IsWarnEnabled) { log.Warn(message); } } #endregion #region Warn 级别的日志 public static void Waring(string message,Exception ex) { var log = GetLog(WarningLevel); if (log.IsWarnEnabled) { log.Warn(message,ex); } } #endregion }
三、在该类库的AssemblyInfo.cs文件末尾添加
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
四、创建log4net.config
在调用LogHelper的项目中,创建一个log4net.config,我这里使用的配置内容如下;
关于参数的详细配置,我就不做介绍了,可参考上文提到的博客中有详细介绍(注意,我在loghelper中虽然写了Warn和Fatal级别的日志,但在此配置中没有对这两个级别的日志做配置,故,项目不会产生这两个级别的日志)
修改log4net.config文件的属性为"始终复制"
五、在需要使用Log4Net的项目中添加该类库的引用(本系统就是Commons.dll)
在需要打印log的地方使用。修改
LogHelper.Info("产生LOG");//产生一条Info级别的Log信息
运行项目会在该项目目录下产生log/Debug/当前日期.txt、log/Error/当前日期.txt、log/Info/当前日期.txt.
在本文中红色标注的地方是可能出错的地方,如有异常一定要先检查这些