如何为最后100个日志行实现内存日志记录器
本文关键字:日志 实现 内存 记录器 100个 最后 | 更新日期: 2023-09-27 18:05:40
如何使高效的内存日志仅存储最后100个条目和可以快速输出结果字符串到TextBox(在每次更新)?
我正在使用File.AppendAllText
进行实际日志记录到文本文件,但希望能够查看我的应用程序中的最后条目。
一个简单的Queue有什么问题:
Queue<string> _items = new Queue<string>();
public void WriteLog(string value)
{
_items.Enqueue(value);
if(_items.Count > 100)
_items.Dequeue();
}
你查过Log4Net吗?
更具体地说,log4net.Appender.MemoryAppender
创建一个长度为maxloglines * maxlogentrywidth的字符数组。将其初始化为除了每个maxlogentrywidth字符的新行之外的所有空白。在您的日志记录方法中,您偏移到maxlogentrywidth * rowIndex并复制字符串中的N个字符,然后复制maxlogentrywidth-N空格。增加rowIndex(rowIndex+1) % maxlines.
要输出单个字符串用于窗口,使用构造函数连接两个字符串,让您索引到数组:new string(chararry, curpos, len) + new string(chararray, 0, curpos-1, chararray.Lengs - curpos)
,其中curpos是maxlogentrywidth * rowIndex。
你必须添加适当的错误检查和线程安全。
可能的方法:
-
ObservableCollection<string>
-
ItemsControl
,ItemsTemplate
为无边界只读TextBox
- 数据绑定,显然。
当然,这有其局限性,因为您不能跨项进行选择,但其中没有字符串连接,并且使用正确的ItemsControl
类型可以在需要时使用虚拟化。