打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
我的开发框架(WinForm)4

日志模块

对于一个系统来说,日志模块是必不可少的,它能给后面系统的维护和bug的修复,带来极大的方便。.net的日志模块有很多,比较流行的有Log4Net,NLog,还有微软企业库的日志模块,我采用的是Log4Net,

1、接口

   由于日志是所有模块都要用到的,因此在核心模块(Core)中实现,为了解耦,自定义一个日志接口ILogger ,参照Log4Net的日志分级,也分为5级,每一级别有1-2个方法, 代码如下。

 /// <summary>/// 日志操作/// </summary>public interface ILogger{/// <summary>/// 写日志 日志级别为Debug/// </summary>/// <param name="message">消息</param>void Debug(string message);/// <summary>/// 写日志 日志级别为Debug/// </summary>/// <param name="format">消息格式字符串</param>/// <param name="args">一个对象数组,其中包含零个或多个要设置格式的对象</param>void Debug(string format, params object[] args);/// <summary>/// 写日志 日志级别为 Error/// </summary>/// <param name="message">消息</param>void Error(string message);/// <summary>/// 写日志 日志级别为 Error/// </summary>/// <param name="format">消息格式字符串</param>/// <param name="args">一个对象数组,其中包含零个或多个要设置格式的对象</param>void Error(string format, params object[] args);/// <summary>/// 写日志 日志级别为 Error/// </summary>/// <param name="message">消息</param>/// <param name="t">系统错误类</param>void Error(string message, Exception t);/// <summary>/// 写日志 日志级别为 Info/// </summary>/// <param name="message">消息</param>void Info(string message);/// <summary>/// 写日志 日志级别为 Info/// </summary>/// <param name="format">消息格式字符串</param>/// <param name="args">一个对象数组,其中包含零个或多个要设置格式的对象</param>void Info(string format, params object[] args);/// <summary>/// 写日志 日志级别为 Warning/// </summary>/// <param name="message">消息</param>void Warning(string message);/// <summary>/// 写日志 日志级别为 Warning/// </summary>/// <param name="format">消息格式字符串</param>/// <param name="args">一个对象数组,其中包含零个或多个要设置格式的对象</param>void Warning(string format, params object[] args);}

 

2、实现:
实现就比较简单了,直接调用Log4Net的相关方法即可,代码如下

 public class Log4NetLogger : ILogger{internal Log4NetLogger(): this(typeof(ILogger)){}internal Log4NetLogger(Type type){log4net.Config.XmlConfigurator.Configure();Log = log4net.LogManager.GetLogger(type);}log4net.ILog Log;#region Implementation of ILoggerpublic void Warning(string message){Log.Warn(message);}public void Debug(string message){Log.Debug(message);}public void Info(string message){Log.Info(message);}public void Error(string message){Log.Error(message);}public void Error(string message, Exception t){Log.Error(message);Log.ErrorFormat("Error: {0}, exception: {1}", t.Message, t);}public void Debug(string format, params object[] args){Log.DebugFormat(format, args);}public void Error(string format, params object[] args){Log.ErrorFormat(format, args);}public void Info(string format, params object[] args){Log.InfoFormat(format, args);}public void Warning(string format, params object[] args){Log.WarnFormat(format, args);}#endregion}

 

为了使用方便,增加一个工厂类,用于创建日志接口,代码如下

 /// <summary>/// 日志工厂/// </summary>public class LogFactory {/// <summary>/// 获得一个日志操作类/// </summary>/// <param name="type">类型</param>/// <returns>日志操作类</returns>public static ILogger GetLogger(Type type) {return new Log4NetLogger(type);}}

 

为什么没有用设计的Ioc的方法呐?考虑到,如果用IOC的方式,万一在Ioc初始化之前以及初始化过程中,出现问题,会造成系统的崩溃,而此时日志接口也不能获得,也就无法记录错误日志。基于这个考虑,所有没有用Ioc的思想去是实现。Log4netLogger实例化方法是internal修饰的,不能在core外部实例化,这样就只有LogFactory 一个创建的入口了。

3、使用

比如我在另外一个项目里有一个 FrmView的窗体,要在这个里面写日志,只需要加入 ILogger Log = LogFactory.GetLogger(typeof(FrmView));用Log实例就可以了,这个项目也不要添加Log4Net的引用。有关Log4Net的配置,园子里有很多高手写的文章,都非常好,我在这里就不多说了。

4、总结

日志模块比较简单,没有什么复杂的业务逻辑,也没有高深的技术含量。但是确是最实用的一个模块。我也是根据我自己的理解设计的,欢迎各位高手指教。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# 利用Selenium实现浏览器自动化操作
Unity3D 导入贴图、模型等资源文件时自动设置参数
C#开发高性能Log Help类设计开发
ASP.NET+MVC+使用+Log4net+记录日志笔记
WinCE程序C/C++/C#实现带时间标记的日志记录
C#多线程写日志
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服