zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    关于冲动 CQ
    关于在虚拟机上使用boost库 CQ
    新项目奖金分配方案 CQ
    关于桌子 CQ
    linux 添加本地yum源
    linux samba 服务器 简单配置
    linux 修改密码
    linux ntp 服务器和用户端
    linux 修改ip 地址
    Union 和 Union All 的区别
  • 原文地址:https://www.cnblogs.com/Juvy/p/2304399.html
Copyright © 2011-2022 走看看