如何为最后100个日志行实现内存记录器?

时间:2011-08-16 17:59:50

标签: c# .net wpf string logging

如何制作只存储最后100个条目的高效内存日志,可以快速将结果字符串输出到TextBox(每次更新)

我正在使用File.AppendAllText实际记录文本文件,但希望能够查看我的应用程序中的最后一个条目。

4 个答案:

答案 0 :(得分:5)

简单队列出了什么问题:

Queue<string> _items = new Queue<string>();

public void WriteLog(string value)
{
    _items.Enqueue(value);
    if(_items.Count > 100)
        _items.Dequeue();
}

答案 1 :(得分:1)

你有没有看过Log4Net

更具体地说是log4net.Appender.MemoryAppender

答案 2 :(得分:1)

创建一个长度为 maxloglines * maxlogentrywidth 的char数组。将其初始化为所有空白,除了每个 maxlogentrywidth 字符的新行。在您的记录方法中,您偏移到 maxlogentrywidth * rowIndex 并复制字符串中的N个字符,然后复制 maxlogentrywidth-N 空格。按(rowIndex + 1)%maxlines 增加 rowIndex

要输出到单个字符串以用于窗口,请使用constructor that let's you index into an array连接两个字符串:new string(chararry, curpos, len) + new string(chararray, 0, curpos-1, chararray.Lengs - curpos)其中 curpos maxlogentrywidth * rowIndex

当然,您必须添加适当的错误检查和线程安全性。

答案 3 :(得分:0)

可能的方法:

  • ObservableCollection<string>
  • ItemsControl ItemsTemplate,无边框只读TextBox
  • 显然是数据绑定。

当然这有其局限性,因为你无法选择交叉项目,但是没有字符串连接,并且使用正确类型的ItemsControl,你可以根据需要使用虚拟化。