在编程当中,我们往往需要书写日志,以方便我们查看
通过书写日志,我们可以获取到程序在运行时的状态,并且可以看到当前值的变化
更可以在程序崩溃时,给到我们提示
在写日志的同时,很容易造成资源的抢占,那我们便需要添加一个锁来预防
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Log
{
class Program
{
private static Object _lock = new object();
static void Main(string[] args)
{
string ConfigPath = @"D:\C#";
WriteInfoLog(ConfigPath); // 可在外部调用
}
public static void WriteInfoLog(string ConfigPath)
{
string msg = string.Empty;
try
{
string path = ConfigPath + @"\log";
if (!Directory.Exists(path)) // 判断路径是否存在
{
Directory.CreateDirectory(path);// 创建目录
}
string logFileName = path + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + "Common.log";
if (!File.Exists(logFileName)) // 判断文件是否存在
{
File.Create(logFileName); // 创建文件
}
lock (_lock) // 加锁防止抢占
{
StreamWriter writer = File.AppendText(logFileName);// 文件中添加文件流
for (int i = 0; i < 10; i++)
{
writer.WriteLine(DateTime.Now.ToString("写日志HH:mm:ss") + "" + msg);
Thread.Sleep(1000);
}
writer.Flush(); // 为了防止数据丢失,应该在关闭读写流之前先flush()
writer.Close();
}
}
catch (Exception ex)
{
string path = ConfigPath + "\\log";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string logFileName = path + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + "Catch.log";
if (!File.Exists(logFileName))
{
File.Create(logFileName);
}
lock (_lock)
{
StreamWriter writer = File.AppendText(logFileName);
writer.WriteLine(DateTime.Now.ToString("日志记录错误HH:mm:ss") + ex.Message + " " + msg);
writer.Flush();
writer.Close();
}
}
}
}
}
本文探讨了在C#开发中如何有效地书写日志,以跟踪程序状态、变量变化,特别是在程序崩溃时提供故障排查线索。同时,文章还提到了避免日志写入过程中的资源抢占问题,提出了使用锁进行同步的策略。
5907

被折叠的 条评论
为什么被折叠?



