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 >> 产生了一条日志记录
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。