C#实现程序单例日志输出
对于一个完整的程序系统,一个日志记录是必不可少的。可以用它来记录程序在运行过程中的运行状态和报错信息。比如,那些不想通过弹框提示的错误,程序执行过程中捕获的异常等。
首先,在你的解决方案中,适当的目录中新建一个类,比如 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 - ; i >= ; i--)
{
// 指定条件,然后删除
if (vFiles[i].Name.Contains("Log"))
{
if ((DateTime.Now - vFiles[i].LastWriteTime).Days > )
{
vFiles[i].Delete();
}
}
}
} } // end class
其中,第8行-第26行是关于实现单例模式的一种方法。这样,在你程序的需要位置执行:
LogManager.LogInstance.WriteLog("产生了一条日志记录");
就会在指定文件中参数一条日志记录了。
即:2016-11-23 23:53:45 >> 产生了一条日志记录
C#实现程序单例日志输出的更多相关文章
- PHP实现程序单例执行
原创文章,转载请注明出处:http://huyanping.sinaapp.com/?p=222 作者:Jenner 一.场景描写叙述: 近期我们一块业务.须要不断的监听一个文件夹的变化.假设文件夹中 ...
- C#应用程序单例并激活程序的窗口 使其显示在最前端
public class SoftHelper { ///<summary> /// 该函数设置由不同线程产生的窗口的显示状态 /// </summary> /// <p ...
- C# 应用程序单例(禁止多开) 获取.net版本号 以及 管理员权限
Mutex不仅提供跨线程的服务,还提供跨进程的服务.当在构造函数中为Mutex指定名称时,则会创建一个命名了的Mutex.其他线程创建Mutex时,如果指定的名称相同,则返回同一个互斥体,不论该线程位 ...
- Inno Setup安装程序单例运行
1.源起: KV项目下载底层升级包,老是报出升级文件占用问题,反复分析,不得其所. 今天突然发现同时启动多个升级程序实例,分析认为安装包同时被调用多次,引发实例访问文件冲突,导致此问题. 安装程序由I ...
- 编写一个Singleton程序(单例)
public class Test { private static Test test = new Test(); private Test(){}//构造方法私有化 private static ...
- [b0011] windows 下 eclipse 开发 hdfs程序样例 (三)
目的: 学习windows 开发hadoop程序的配置. [b0007] windows 下 eclipse 开发 hdfs程序样例 太麻烦 [b0010] windows 下 eclipse 开发 ...
- 第一课 ionic 日志输出
写程序的首要问题就是要打印日志,因为只有将日志输出才能真正了解程序的运行状态. 日志输出有两种方式 1.console输出 console.log("测试一下") console. ...
- 看完MJ讲解的单例后的个人总结
1.单例的介绍 单例是iOS常用的开发模式的一种. 2.什么是单例 单例就是一个类只创建一个对象,只分配一次内存空间. 3.单例的应用场景 1)系统的单例: [UIApplication share ...
- 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)
回到目录 之前的讲过两篇关于日志组件的文章,分别是<第一回 日志记录组件之自主的Vlog>和<第三回 日志记录组件之log4net>,而今天主要说一下我自己开发的另一种日志 ...
随机推荐
- usg6500
- BZOJ_5359_[Lydsy1805月赛]寻宝游戏_DP
BZOJ5359_[Lydsy1805月赛]寻宝游戏_DP Description begin.lydsy.com/JudgeOnline/upload/201805.pdf 我们需要找到一条权值最大 ...
- liunx命令之:命令链接ftp服务器
1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...
- 【运维程序】简单的命令控制器(支持定时命令执行、重复定时任务命令和进程管理,开发这个小程序主要是为了方便管理服务进程)【个人github项目】
一.前言: command-controller 一个运维程序,简单的命令控制器(支持定时命令执行和重复定时命令,开发这个程序主要是为了方便管理服务进程) 本来是要用python做的,但是之前做ffm ...
- Windows C/C++调试
windows兼容dirent.h error c4996: 'fopen': This function or variable may be unsafe This file requires _ ...
- linux 遍历目录+文件(优化版本)
c++17 filesystem, regex 遍历目录 #include <stdio.h> #include <sys/types.h> #include <dire ...
- PCL中异常处理机制
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=287 本节我们主要讨论PCL在编写和应用过程中如何利用PCL的异常机制,提高 ...
- UML 学习地址
UML 学习地址 网址:http://www.uml.org.cn/oobject/201609092.asp http://www.uml.org.cn/oobject/201009081.asp ...
- SQL Server(三)
一.数据库操作 create database 数据库名称 ——创建drop database 数据库名称 ——删除use 数据库名称 ——使用go 两条SQL语句之间分隔 二.表的操作 create ...
- IIS 上传大文件 30MB 设置限制了上传大小
用uploadify在IIS6下上传大文件没有问题,但是迁移到IIS7下面,上传大文件时,出现HTTP 404错误. 查了半天,原来是IIS7下的默认设置限制了上传大小.这个时候Web.Config中 ...