SAS框架之文本日志帮助类——TextLogHelper

       说到日志,大家都清楚,无非就是记录:谁,在什么时候,做了什么/发生了什么错误,是不是觉得很简单。这次我也来做一回轮子,一步步教你如何写自己的日志帮助类。

       在开始之前我们需要分析一下日志帮助类(这里主要指文本日志)有哪些地方需要注意的:

1)、日志帮助类是用静态类,还是用?

2)、日志发生者通过什么方式传入,参数,还是?

3)、日志通过什么方式写,同步还是异步?

4)、日志文件保存位置和文件大小控制。

5)、扩展问题。

 

暂时个人只找到这么多,望大家补充。

        下面我就来说自己在这些方面是如何处理的

一、日志帮助类是用静态类,还是用?

       我的选择是非静态类,即通过实例化的方式获取日志帮助类对象,然后调用方法写日志,具体代码为:

TextLogHelper LogHelper = new TextLogHelper();

LogHelper.WriteLog(......);

       为何要这样做呢?其实说起来,自己当初写的好多东西都是静态,如静态类,静态对象、静态方法等等,因为那玩意儿好使啊,写起来方便,调用更加方便,为何不用。但是在不断的码农生活中,自己慢慢觉得有时候静态的东西也并不好使,例如:

       1)、静态公共字段/属性:并发问题,因为调用方都可能会修改值。这里只是说可能存在这种情况;

       2)、公共方法:参数个数问题。因为是静态方法,所以方法内部所需要的信息,只能通过参数的形势传入;

       3)、静态字段、属性维护问题,因为静态的字段太多,太杂,维护起来自然增加了难度。

       4)、面向对象程序开发的一个核心就是多态,所以如果用静态类的话,就不可能实现多态了。

       至于其他的这里就不一一列举了。还有一点需要指出的是,上述几点只是想说静态类存在这些问题,但并非表示任何情况都不适合用静态类,如工具类,数据转换类等,就可以采用静态类方法实现。所以采用静态类与否,还得根据实际情况而定。

 

二、日志发生者通过什么方式传入,参数,还是?

三、日志通过什么方式写,同步还是异步? 

四、日志文件保存位置和文件大小控制。

五、扩展问题。

        二、三、四、五几点我就放在一块来讲述了。

        其实日志发生者存在两种情况:一种是固定的日志发生在,如系统日志,或者框架内部日志;另外一种就是用户日志,如Web应用程序中,不同的用户登录就会面临不同的日志发生发生着。

        先来给出SAS框架中的文本日志类的两个构造函数:

private TextLogHelper(string logSavePath, bool asynMechanismLog, int logFileSize){...}

public TextLogHelper(Func<ILogUser> getLogUserHandler, string logSavePath, bool asynMechanismLog, int logFileSize){...}

public TextLogHelper(ILogUser logUser, string logSavePath, string asynMechanismLog, string logFileSize){...}

       通过上面几个构造函数,你或许已经看出了上面端倪了:

       1)、日志文件保存路径、同步/异步方式保存日志内容、日志文件大小问题的控制,都是通过构造函数参数传入的.

       2)、日志用户采用ILogUser的方式,也是为了便于扩展。在扩展方面其实还有一个ILogHelper接口,而本文要将的TextLogHelper就是继承自ILogHelper接口。

       3)、日志发生着通过两种方式传入,第一种是委托方式,让调用方来决定日志发生者是谁;第二种是直接传递日志用户对象进去。

      下面给出ILogHelper接口的代码。

 

 1  namespace SAS.Interface
 2 {
 3      #region using
 4      using System;
 5      #endregion
 6      ///   <summary>
 7       ///  NameSpace :: SAS.Interface
 8       ///  Creater :: Juvy[david.telvent@gmail.com]
 9       ///  Create Time :: 2011-11-13 7:50:47
10       ///  Function :: 日志帮助类基类
11       ///   </summary>
12       public  interface ILogHelper
13     {
14          ///   <summary>
15           ///  当前日志帮助类所使用的日志用户
16           ///   </summary>
17          Func<ILogUser> GetLogUserHandler {  getset; }
18          ///   <summary>
19           ///  写日志信息
20           ///   </summary>
21           ///   <param name="message"> 日志信息 </param>
22           void WriteLog( string message);
23          ///   <summary>
24           ///  写日志信息
25           ///   </summary>
26           ///   <param name="message"> 日志信息 </param>
27           ///   <param name="methodName"> 当前出错的方法名称 </param>
28           void WriteLog( string message,  string methodName);
29          ///   <summary>
30           ///  写日志信息
31           ///   </summary>
32           ///   <param name="ex"> 异常 </param>
33           void WriteLog(Exception ex);
34          ///   <summary>
35           ///  写日志信息
36           ///   </summary>
37           ///   <param name="ex"> 异常 </param>
38           ///   <param name="message"> 日志信息 </param>
39           void WriteLog(Exception ex,  string message);
40          ///   <summary>
41           ///  写日志信息
42           ///   </summary>
43           ///   <param name="ex"> 异常 </param>
44           ///   <param name="message"> 日志信息 </param>
45           ///   <param name="methodName"> 当前出错的方法名称 </param>
46           void WriteLog(Exception ex,  string message,  string methodName);
47     }
48 }

       日志接口包含五个写日志的方法,一个获取日志用户的属性。实现起来应该很简单,所以至于如何实现,在这里就不多讲了,留待自我发挥。

       现在说说本日志帮助类的两点不足:

       1)、日志级别问题

       2)、日志类型问题

 

       好了,本片SAS框架之文本日志类就讲到这里了,欢迎大家斧正!

 

 

ASP.NET开发技术交流群: 67511751

另:本人想找一些志同道合的人,可以是跟我一起交流技术的,或者是给予鼓励和支持的,非诚勿扰,谢谢!

QQ:1054930154

posted on 2011-12-28 10:42 Juvy 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Juvy/archive/2011/12/28/2304399.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值