65.9K
CodeProject 正在变化。 阅读更多。
Home

C# CHTMLLogFile 类

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.80/5 (4投票s)

2005 年 5 月 24 日

2分钟阅读

viewsIcon

29637

downloadIcon

382

本文介绍的 CHTMLLogFile 类为日志文件实现了 HTML 格式,并具有一些(有用的)功能。

Sample Image

引言

为了跟踪应用程序的执行(事件),日志文件可能很有用。 它们通常是文本文件,通过在文件末尾添加行来记录事件。 本文介绍的 CHTMLLogFile 类为日志文件实现了 HTML 格式,并具有一些(有用的)功能。

  1. 最新事件最先记录。(使用 IE 和 F5 将始终在列表顶部显示最新事件,而无需向下滚动。)
  2. 日志级别控制。(每个条目的用户定义级别。仅记录具有正确详细级别​​的事件。)
  3. 不同事件/日志条目的不同颜色。
  4. 日志文件大小控制。(当达到大小限制时,文件将以后缀重命名,并创建一个新文件,其名称相同,因此无需在文件更改时关闭/打开 IE。只需 F5 即可。)

背景

日志文件的结构如下所示

Sample Image

将新事件添加到日志文件时,标头被假定为固定大小,因为它被读取并跳过。

执行顺序是

  1. 读取现有文件。
  2. 截断现有文件。
  3. 写入标头
  4. 写入新事件
  5. 通过跳过标头并向文件添加旧事件来解析读取的文件。

使用代码

有两个类:LogItemCHTMLLogFileClass,它们是 CHTMLLogNamespace 命名空间的一部分。(将 CHTMLLogfile.cs 文件添加到您的项目中。)

下面列出的 LogItem 类实现某种结构,其中包含有关应用程序执行中特定事件的详细信息。 例如,如果我们要记录错误,我们将创建一个 LogItem,其值为

Name="ERROR", Color="red", FontSize=2, Level= 1

(1 是最高严重级别。级别越高,严重程度越低。)

    public class LogItem : IComparable
    {
        public string    m_strName;
        public string    m_strColor;
        public int       m_nFontSize;
        public int       m_nLevel;

        public LogItem(string strName,string strColor, int nFontSize,int nLevel)
        {
            m_strName =strName;
            m_strColor = strColor;
            m_nFontSize = nFontSize;
            m_nLevel=nLevel;
        }

        public Int32 CompareTo(Object obj) 
        {
            LogItem tmpObj = (LogItem) obj;
            return (this.m_strName.ToLower().CompareTo(tmpObj.m_strName.ToLower()));
        }
    }

注意CompareTo 方法此时未使用。 如果需要,它可用于对 LogItem 元素数组进行排序。

按照以下准则在您的应用程序中启用和使用该类

using CHTMLLogNamespace;
public class MainForm : System.Windows.Forms.Form
{
  private System.ComponentModel.Container components = null; 
  private CHTMLLogFileClass m_logfileMain;
  public MainForm() 
  { 
   // Required for Windows Form Designer support 
   InitializeComponent(); 
   // TODO: Add any constructor code after InitializeComponent call 
   InitializeApplication();
  }

  private bool InitializeApplication()
  { 
    //******************************************************************** 
    string strPath = AppDomain.CurrentDomain.BaseDirectory+"Log\\"; 
    string strName = System.DateTime.Now.ToString("yyyy-MM-dd")+ ".html"; 
    m_logfileMain = new CHTMLLogFileClass(strPath+strName); 
    m_logfileMain.LOGLEVEL = 4; 
    m_logfileMain.MAXSIZE = 5; 
    m_logfileMain.AddHeaderItem("ERROR","red",2,1); 
    m_logfileMain.AddHeaderItem("Performance","blue",2,2);
    m_logfileMain.AddHeaderItem("Event","green",2,3); 
    m_logfileMain.AddHeaderItem("Info","black",2,4); 
    //********************************************************************
    return true;   
   } 
}

m_logfileMain.LOGLEVEL = 4;

日志级别 4 将仅记录使用 m_logfileMain.AddHeaderItem("Info","black",2,4); 中第 4 个参数创建的事件,其值为 4 或更低。 当在应用程序中调用 LogMessage 方法时,将不会记录使用级别 5 创建的日志条目。

每当需要记录事件时,都应调用 LogMessage 方法。 第一个参数是在上面的代码片段中创建的条目的名称。 比较不区分大小写,因此您使用 "Error" 或 "error" 调用以下方法对于这样添加的条目类型并不重要

m_logfileMain.AddHeaderItem("ERROR","red",2,1);
m_logfileMain.LogMessage("Performance","test");
m_logfileMain.LogMessage("ERROR","test"); 
m_logfileMain.LogMessage("Event","test"); 
m_logfileMain.LogMessage("Info","test");
© . All rights reserved.