如何用c#编写日志文件?
目前,我有一个计时器,这个语句每20秒滴答一次:
File.WriteAllText(filePath+"log.txt", log);对于我想要记录的所有内容,我都会这样做:
log += "stringToBeLogged";因为您可以假设字符串日志只是随着程序的运行而增长。(我甚至不知道每个字符串是否有最大字符?)
我认为必须有更好的办法来做到这一点。我只是认为,每次在日志中添加一些内容,一遍又一遍地写入整个文件将是很麻烦的。
发布于 2013-11-25 05:10:21
从性能的角度来看,您的解决方案不是最优的。每次使用+=添加另一个日志条目时,都会将整个字符串复制到内存中的另一个位置。我建议使用StringBuilder来代替:
StringBuilder sb = new StringBuilder();
...
sb.Append("log something");
...
// flush every 20 seconds as you do it
File.AppendAllText(filePath+"log.txt", sb.ToString());
sb.Clear();顺便说一下,计时器事件可能是在另一个线程上执行的。因此,您可能需要在访问sb对象时使用互斥对象。
另一件需要考虑的事情是,在执行之后的20秒内添加的日志条目发生了什么。您可能希望在应用程序退出之前将您的字符串刷新到文件中。
发布于 2013-11-25 05:00:09
创建一个类,全局创建一个对象,并调用它
using System.IO;
using System.Reflection;
public class LogWriter
{
private string m_exePath = string.Empty;
public LogWriter(string logMessage)
{
LogWrite(logMessage);
}
public void LogWrite(string logMessage)
{
m_exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
try
{
using (StreamWriter w = File.AppendText(m_exePath + "\\" + "log.txt"))
{
Log(logMessage, w);
}
}
catch (Exception ex)
{
}
}
public void Log(string logMessage, TextWriter txtWriter)
{
try
{
txtWriter.Write("\r\nLog Entry : ");
txtWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),
DateTime.Now.ToLongDateString());
txtWriter.WriteLine(" :");
txtWriter.WriteLine(" :{0}", logMessage);
txtWriter.WriteLine("-------------------------------");
}
catch (Exception ex)
{
}
}
}发布于 2013-11-25 04:57:40
使用File.AppendAllText代替:
File.AppendAllText(filePath + "log.txt", log);https://stackoverflow.com/questions/20185015
复制相似问题