首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用c#编写日志文件?

如何用c#编写日志文件?
EN

Stack Overflow用户
提问于 2013-11-25 04:55:57
回答 11查看 424.7K关注 0票数 65

如何用c#编写日志文件?

目前,我有一个计时器,这个语句每20秒滴答一次:

代码语言:javascript
运行
复制
File.WriteAllText(filePath+"log.txt", log);

对于我想要记录的所有内容,我都会这样做:

代码语言:javascript
运行
复制
log += "stringToBeLogged";

因为您可以假设字符串日志只是随着程序的运行而增长。(我甚至不知道每个字符串是否有最大字符?)

我认为必须有更好的办法来做到这一点。我只是认为,每次在日志中添加一些内容,一遍又一遍地写入整个文件将是很麻烦的。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-11-25 05:10:21

从性能的角度来看,您的解决方案不是最优的。每次使用+=添加另一个日志条目时,都会将整个字符串复制到内存中的另一个位置。我建议使用StringBuilder来代替:

代码语言:javascript
运行
复制
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秒内添加的日志条目发生了什么。您可能希望在应用程序退出之前将您的字符串刷新到文件中。

票数 77
EN

Stack Overflow用户

发布于 2013-11-25 05:00:09

创建一个类,全局创建一个对象,并调用它

代码语言:javascript
运行
复制
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)
        {
        }
    }
}
票数 67
EN

Stack Overflow用户

发布于 2013-11-25 04:57:40

使用File.AppendAllText代替:

代码语言:javascript
运行
复制
File.AppendAllText(filePath + "log.txt", log);
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20185015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档