限制文本日志文件的好方法

我有一个winForm应用程序,我有一个文本文件用于记录目的。 我想将其大小限制为10 MB,以便如果传递此限制并写入新数据,则删除文本文件中最旧的数据以为新数据腾出空间。 任何有用的建议?

使用一些日志框架(我建议NLog或log4net ,都可以从NuGet获得),它提供滚动日志文件function。

例如,使用log4net,您可以使用以下配置将日志文件大小限制为10Mb

           

NLog配置看起来像

  

我会使用像log4net这样的日志库。 RollingFileAppender正是您正在寻找的。

只需在写入文件之前检查文件大小。 这是一个tuto

http://www.dotnetperls.com/fileinfo-length

如果你想要更多的东西尝试NLog或log4net,这是其他人建议的真正有用

如果您不想使用日志框架(尽管您可能应该这样做),那么您可以执行以下操作:

  • 每次写(或在其他一些常规时期)查看文件的长度
  • 超过限制时,执行修剪操作 – 这将涉及从文件的开头开始,然后遍历文件读取行,直到您已读取足够的数据进行修剪。 找到这个位置之后,你有几种方法可以从文件的开头删除空格,虽然它们都不是很吸引人,除非你很乐意将整个文件加载到内存中,这对于现在的10MB文件来说并不是不合理的。 。

实现的关键是要从文件中删除比恢复到限制所需的最小值更多的东西 – 例如让文件增长到11MB,然后将其修剪回10MB。 然后,您只需在每1MB的日志记录后运行一个修剪周期。 如果你对此很天真,那么你会发现自己修剪每一条记录的线路,这是荒谬的。

但实际上,已经存在的.NET的优秀日志框架是一种更好的方法 – 例如,它们可以是异步日志记录和关键日常日志。