您的位置:首页 > 编程语言 > C#

一个简单实用的C#日志类(第二版)

2011-02-25 23:16 483 查看
public static class Log
{
private static LogManager logManager;
static Log()
{
logManager = new LogManager();
}

public static void WriteLog(LogFile logFile, string msg)
{
logManager.WriteLog(logFile, msg);
}

public static void WriteLog(string logFile, string msg)
{
logManager.WriteLog(logFile, msg);
}
}

LogManager

using System;
using System.Text;
using System.IO;

public class LogManager
{
private string logFileName = string.Empty;
private string logPath = "Log";
private string logFileExtName = "log";
private bool writeLogTime = true;
private bool logFileNameEndWithDate = true;
private Encoding logFileEncoding = Encoding.UTF8;
private object obj = new object();

#region 构造函数
public LogManager()
{
this.LogPath = "Log";
this.LogFileExtName = "log";
this.WriteLogTime = true;
this.logFileNameEndWithDate = true;
this.logFileEncoding = Encoding.UTF8;
}

public LogManager(string logPath, string logFileExtName, bool writeLogTime)
{
this.LogPath = logPath;
this.LogFileExtName = logFileExtName;
this.WriteLogTime = writeLogTime;
this.logFileNameEndWithDate = true;
this.logFileEncoding = Encoding.UTF8;
}

#endregion

#region 属性
/// <summary>
/// Log 文件路径
/// </summary>
public string LogPath
{
get
{
if (this.logPath == null || this.logPath == string.Empty)
{
//Application.StartupPath
this.logPath = AppDomain.CurrentDomain.BaseDirectory;
}
return this.logPath;
}
set
{
this.logPath = value;
if (this.logPath == null || this.logPath == string.Empty)
{
//Application.StartupPath
this.logPath = AppDomain.CurrentDomain.BaseDirectory;
}
else
{
try
{
// 判断是否不是绝对路径(绝对路径里还有":")
if (this.logPath.IndexOf(Path.VolumeSeparatorChar) >= 0)
{ /* 绝对路径 */}
else
{
// 相对路径
this.logPath = AppDomain.CurrentDomain.BaseDirectory + this.logPath;
}
if (!Directory.Exists(this.logPath))
Directory.CreateDirectory(this.logPath);
}
catch
{
this.logPath = AppDomain.CurrentDomain.BaseDirectory;
}
if (!this.logPath.EndsWith(@"\"))
this.logPath += @"\";
}
}
}

/// <summary>
/// Log 文件扩展名
/// </summary>
public string LogFileExtName
{
get { return this.logFileExtName; }
set { this.logFileExtName = value; }
}

/// <summary>
/// 是否在每个Log行前面添加当前时间
/// </summary>
public bool WriteLogTime
{
get { return this.writeLogTime; }
set { this.writeLogTime = value; }
}

/// <summary>
/// 日志文件名是否带日期
/// </summary>
public bool LogFileNameEndWithDate
{
get { return logFileNameEndWithDate; }
set { logFileNameEndWithDate = value; }
}

/// <summary>
/// 日志文件的字符编码
/// </summary>
public Encoding LogFileEncoding
{
get { return logFileEncoding; }
set { logFileEncoding = value; }
}
#endregion

#region 公有方法
public void WriteLog(string logFile, string msg)
{
lock (obj)
{
try
{
string dateString = string.Empty;
if (this.logFileNameEndWithDate || logFile.Length == 0)
{
dateString = DateTime.Now.ToString("yyyyMMdd");
}
logFileName = string.Format("{0}{1}{2}.{3}",
this.LogPath,
logFile,
dateString,
this.logFileExtName);
using (StreamWriter sw = new StreamWriter(logFileName, true, logFileEncoding))
{
if (writeLogTime)
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss: ") + msg);
}
else
{
sw.WriteLine(msg);
}
}
}
catch
{ }
}
}

public void WriteLog(LogFile logFile, string msg)
{
this.WriteLog(logFile.ToString(), msg);
}

public void WriteLog(string msg)
{
this.WriteLog(string.Empty, msg);
}
#endregion
}

public enum LogFile
{
Trace,
Error,
SQL,
SQLError
}
第一版:一个简单实用的C#日志类(第一版)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: