1.前言
这里主要说明一下为什么日志类使用单例模式,首先我们先了解一下单例模式。单例模式:创建的类在当前进程中只能有一个实例。用在写日志主要是防止在多线程写日志的时候防止对文件操作出现访问冲突的现象。
2.操作封装
public class Log
{
private static Log _instance = null;
private static readonly object syncObject = new object();
/// <summary>
/// 创建Log单例对象
/// 对日志操作类添加了单例对象,有益于使用日志类时不要每次都要进行实例化而造成的资源浪费
/// </summary>
public static Log Instance
{
get
{
if (null == _instance)
{
lock (syncObject)
{
if (null == _instance)
{
_instance = new Log();
}
}
}
return _instance;
}
}
private string PATH = System.Web.HttpContext.Current.Server.MapPath("/") + "Log\\";
/// <summary>
/// 错误
/// </summary>
/// <param name="text"></param>
public void Error(string text)
{
try
{
if (!Directory.Exists(PATH + "Error\\"))
{
Directory.CreateDirectory(PATH + "Error\\");
}
string fileName = PATH + "Error\\Log_Error_" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
File.AppendAllText(fileName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " INFO:" + text + "\r\n");
}
catch (Exception ex) { string msg = ex.Message; }
}
/// <summary>
/// 系统异常,并打印异常信息
/// </summary>
/// <param name="ex"></param>
public void Error(Exception ex)
{
try
{
if (!Directory.Exists(PATH + "Error\\"))
{
Directory.CreateDirectory(PATH + "Error\\");
}
string fileName = PATH + "Error\\Log_Error_" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
File.AppendAllText(fileName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " Err:" + ex.Message + ex.StackTrace + "\r\n");
}
catch { }
}
/// <summary>
/// 警告
/// </summary>
/// <param name="text"></param>
public void Warn(string text)
{
try
{
if (!Directory.Exists(PATH + "Warn\\"))
{
Directory.CreateDirectory(PATH + "Warn\\");
}
string fileName = PATH + "Warn\\Log_Warn_" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
File.AppendAllText(fileName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " INFO:" + text + "\r\n");
}
catch { }
}
/// <summary>
/// 信息
/// </summary>
/// <param name="text"></param>
public void Info(string text)
{
try
{
if (!Directory.Exists(PATH + "Info\\"))
{
Directory.CreateDirectory(PATH + "Info\\");
}
string fileName = PATH + "Info\\Log_Info_" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
File.AppendAllText(fileName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " INFO:" + text + "\r\n");
}
catch { }
}
/// <summary>
/// 成功
/// </summary>
/// <param name="text"></param>
public void Success(string text)
{
try
{
if (!Directory.Exists(PATH + "Success\\"))
{
Directory.CreateDirectory(PATH + "Success\\");
}
string fileName = PATH + "Success\\Log_Success_" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
File.AppendAllText(fileName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " INFO:" + text + "\r\n");
}
catch { }
}
}
3.方法调用
Log.Instance.Error("需要打印的日志内容(字符串形式)");
Log.Instance.Error(Exception);//重载Error方法,传入异常类
如果是winform程序,则只需要修改一下“PATH”的初始化