• C#实现程序单例日志输出


    对于一个完整的程序系统,一个日志记录是必不可少的。可以用它来记录程序在运行过程中的运行状态和报错信息。比如,那些不想通过弹框提示的错误,程序执行过程中捕获的异常等。

    首先,在你的解决方案中,适当的目录中新建一个类,比如 LogManager:

    编写如下代码:

     1     /// <summary>
     2     /// 日志管理
     3     /// </summary>
     4     public class LogManager
     5     {
     6         private string _logDir; // 日志文件存放目录
     7 
     8         private static LogManager m_LogInstance; // 静态单例对象
     9         // 静态构造函数
    10         static LogManager()
    11         {
    12             m_LogInstance = new LogManager();
    13         }
    14         // 私有构造函数(必备函数,不允许外部对该类进行实例化)
    15         private LogManager()
    16         {
    17             _logDir = Environment.CurrentDirectory + "\Log";
    18             this.DelOldFile();
    19         }
    20         /// <summary>
    21         /// 属性获取单例对象
    22         /// </summary>
    23         public static LogManager LogInstance
    24         {
    25             get { return m_LogInstance; }
    26         }
    27 
    28         /// <summary>
    29         /// 写入一条日志记录
    30         /// </summary>
    31         /// <param name="pLog">日志记录内容</param>
    32         public void WriteLog(string pLog)
    33         {
    34             lock (this._logDir) //排它锁:防止主程序中出现多线程同时访问同一个文件出错
    35             {
    36                 // 根据时间创建一个日志文件
    37                 var vDT = DateTime.Now;
    38                 string vLogFile = string.Format("{0}\Log{1}{2}{3}.log",_logDir,vDT.Year,vDT.Month,vDT.Day);
    39                 // 创建文件流,用于写入
    40                 using (FileStream fs = new FileStream(vLogFile, FileMode.Append))
    41                 {
    42                     StreamWriter sw = new StreamWriter(fs);
    43                     sw.WriteLine("{0}  >>  {1}", vDT.ToString("yyyy-MM-dd HH:mm:ss"), pLog);
    44                     sw.Flush();
    45                     sw.Close();
    46                     fs.Close();
    47                 }
    48             }
    49         }
    50 
    51         // 删除过期文件
    52         private void DelOldFile()
    53         {
    54             // 遍历指定文件夹下所有子文件,将一定期限前的日志文件删除。
    55             if (!Directory.Exists(this._logDir))
    56             {
    57                 // 如果文件夹目录不存在
    58                 Directory.CreateDirectory(this._logDir);
    59                 return;
    60             }
    61 
    62             var vFiles = (new DirectoryInfo(this._logDir)).GetFiles();
    63             for (int i = vFiles.Length - 1; i >= 0; i--)
    64             { 
    65                 // 指定条件,然后删除
    66                 if (vFiles[i].Name.Contains("Log"))
    67                 {
    68                     if ((DateTime.Now - vFiles[i].LastWriteTime).Days > 7)
    69                     {
    70                         vFiles[i].Delete();
    71                     }
    72                 }            
    73             }
    74         }
    75 
    76     } // end class

    其中,第8行-第26行是关于实现单例模式的一种方法。这样,在你程序的需要位置执行:

    LogManager.LogInstance.WriteLog("产生了一条日志记录");

    就会在指定文件中参数一条日志记录了。

    即:2016-11-23 23:53:45  >>  产生了一条日志记录

  • 相关阅读:
    手动卸载 SQL Server 2005 Express
    标准正态分布函数数值表
    SQL Server, Error converting data type nvarchar to int
    如何修改windows XP的默认字体?
    C# 字符串格式化
    跨域cookie访问 Easy Cross Domain Cookies (Sharing cookies between domains)
    25_Android_网络通信之资讯客户端(下)
    毕业设计经验总结
    数学之路(2)四大神器haskell(28)
    java.lang.RuntimeException: Invalid action class configuration that references an unknown class name
  • 原文地址:https://www.cnblogs.com/CUIT-DX037/p/6096135.html
Copyright © 2020-2023  润新知