public static class LogWriter
{
private static ReaderWriterLockSlim writeLock = new ReaderWriterLockSlim();
public static void WriteExceptionLog(string content)
{
#if DEBUG
MessageBox.Show(content);
#endif
WriteLog(content, Constant.EXCEPTION_LOG_PATH);
}
public static void WriteLog(string content, string path)
{
try
{
writeLock.EnterWriteLock();
string directory = Path.GetDirectoryName(path);
if (!Directory.Exists(Path.GetDirectoryName(directory)))
Directory.CreateDirectory(directory);
using (StreamWriter writeFile = new StreamWriter(path, true))
{
content = DateTime.Now + " : " + content;
writeFile.WriteLine(content);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
writeLock.ExitWriteLock();
}
}
}
我有一个写日志的类。因为我正在异步写入日志,所以我需要在写入完成时放置一个锁并释放它,但这似乎是一个笨重的解决方案,甚至可能对性能有害。
有什么更好的方法可以解决这个问题?
答案 0 :(得分:3)
出于性能原因以及为了避免log-ON和log-OFF之间出现非常不同的行为,我建议每个线程运行一个缓冲的日志文件。
对应方是:
要进一步实时,您必须登录内存,并开发专用接口来提取登录请求,但这种日志通常保留给硬实时嵌入式应用程序。
低CPU消耗安全日志记录的其他解决方案(低级C编程):
如果观察到的进程崩溃,则由于共享内存段附加到日志管理器进程,因此不会丢失任何日志记录。
答案 1 :(得分:0)
在每个日志请求上打开,写入然后关闭文件都是多余且低效的。
在日志类上,使用缓冲区,并将该缓冲区的内容写入文件,每次X请求,关闭或每隔Y分钟。