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

最基础的记录日志代码

2011-12-30 16:05 225 查看
/// 一个非常小的系统需要记录系统日志文件,要求按天建立文件夹,将当天的日志文件放在当天文件夹内

/// 每个日志文件的大小不超过指定的大小,例如5M,超过大小限制时,创建新的日志文件记录日志

/// 当前代码存在一个获取文件大小的问题,暂时没有找到好的解决办法,有没有其他好的办法?

/// 实现代码如下:

public static class SystemLog
{
/// <summary>
/// 写入日志
/// </summary>
/// <param name="log">需要记录的日志内容</param>
public static void WriteLog(string log)
{
try
{
Stream stream = File.Open(CheckFile(), FileMode.Append);
StreamWriter sw = new StreamWriter(stream);
sw.Write(log);
sw.Close();
stream.Close();
}
catch (Exception e)
{
//日志文件存在IO读写权限等限制
//出现读写日志BUG时,需要以其他方法记录系统BUG
Console.WriteLine(e.Message);
}
}

/// <summary>
/// 检查目前日志文件的记录情况,保证每个日志文件的大小不超过5M
/// 日志文件按天分文件夹存储,当天的日志文件超过5M时,在文件夹新建日志文件
/// </summary>
/// <returns></returns>
private static string CheckFile()
{
//文件夹地址
string appPath = System.Windows.Forms.Application.StartupPath + "\\" + DateTime.Now.ToString("yyyyMMdd");
string filePath = string.Empty;
if (!Directory.Exists(appPath))
{
DateTime now = DateTime.Now;
Directory.CreateDirectory(appPath);
Directory.SetLastAccessTime(appPath, now);
filePath = appPath + "\\" + now.ToString("yyyyMMddHHmmss") + ".log";
FileStream fs = File.Create(filePath);
fs.Close();
}
else
{
DateTime lastAccessTime = Directory.GetLastAccessTime(appPath);
filePath = appPath + "\\" + lastAccessTime.ToString("yyyyMMddHHmmss") + ".log";
//这里在获取文件大小时需要打开文件获取字节流后关闭文件
//需要采用其他方法获取文件大小,以提高效率
if (File.ReadAllBytes(filePath).Length >= 5242880)
{
try
{
DateTime now = DateTime.Now;
Directory.SetLastAccessTime(appPath, now);
filePath = appPath + "\\" + now.ToString("yyyyMMddHHmmss") + ".log";
FileStream fs = File.Create(filePath);
fs.Close();
}
catch (IOException e)
{
//如果文件夹处于打开状态,则该属性无法写入文件夹
//系统包IOException错误,下面需要以其他方法记录BUG
Console.WriteLine(e.Message);
}
}
}
return filePath;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: