欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-15 12:01:04
对于一个完整的程序系统,一个日志记录是必不可少的。可以用它来记录程序在运行过程中的运行状态和报错信息。比如,那些不想通过弹框提示的错误,程序执行过程中捕获的异常等。 首先...

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

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

编写如下代码:

/// <summary>
  /// 日志管理
  /// </summary>
  public class logmanager
  {
    private string _logdir; // 日志文件存放目录

    private static logmanager m_loginstance; // 静态单例对象
    // 静态构造函数
    static logmanager()
    {
      m_loginstance = new logmanager();
    }
    // 私有构造函数(必备函数,不允许外部对该类进行实例化)
    private logmanager()
    {
      _logdir = environment.currentdirectory + "\\log";
      this.deloldfile();
    }
    /// <summary>
    /// 属性获取单例对象
    /// </summary>
    public static logmanager loginstance
    {
      get { return m_loginstance; }
    }

    /// <summary>
    /// 写入一条日志记录
    /// </summary>
    /// <param name="plog">日志记录内容</param>
    public void writelog(string plog)
    {
      lock (this._logdir) //排它锁:防止主程序中出现多线程同时访问同一个文件出错
      {
        // 根据时间创建一个日志文件
        var vdt = datetime.now;
        string vlogfile = string.format("{0}\\log{1}{2}{3}.log",_logdir,vdt.year,vdt.month,vdt.day);
        // 创建文件流,用于写入
        using (filestream fs = new filestream(vlogfile, filemode.append))
        {
          streamwriter sw = new streamwriter(fs);
          sw.writeline("{0} >> {1}", vdt.tostring("yyyy-mm-dd hh:mm:ss"), plog);
          sw.flush();
          sw.close();
          fs.close();
        }
      }
    }

    // 删除过期文件
    private void deloldfile()
    {
      // 遍历指定文件夹下所有子文件,将一定期限前的日志文件删除。
      if (!directory.exists(this._logdir))
      {
        // 如果文件夹目录不存在
        directory.createdirectory(this._logdir);
        return;
      }

      var vfiles = (new directoryinfo(this._logdir)).getfiles();
      for (int i = vfiles.length - 1; i >= 0; i--)
      { 
        // 指定条件,然后删除
        if (vfiles[i].name.contains("log"))
        {
          if ((datetime.now - vfiles[i].lastwritetime).days > 7)
          {
            vfiles[i].delete();
          }
        }      
      }
    }

  } // end class

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

logmanager.loginstance.writelog("产生了一条日志记录");

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: