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

时间:2013-11-22 13:07:33

标签: c# text-files

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

4 个答案:

答案 0 :(得分:9)

使用一些日志框架(我建议使用NLoglog4net,两者都可以从NuGet获得),它提供滚动日志文件功能。

E.g。使用log4net,您可以使用以下配置将日志文件大小限制为10Mb

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %logger - %message%newline" />
    </layout>
</appender>

NLog配置看起来像

<target xsi:type="File"
      name="RollingFileAppender"
      layout="${verbose}"        
      archiveAboveSize="10000000"
      maxArchiveFiles="10"
      archiveFileName="${basedir}/archives/log.{#####}.txt"
      archiveNumbering="Sequence"        
      fileName="log.txt" />

答案 1 :(得分:3)

我使用log4net之类的日志库。 RollingFileAppender正是您正在寻找的。

答案 2 :(得分:1)

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

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

如果你想要更多的东西,请尝试NLog或log4net,这是其他人建议的非常有帮助的

答案 3 :(得分:1)

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

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

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

但实际上,已经存在的.NET的优秀日志框架是一种更好的方法 - 例如,异步日志记录和关键日常日志的滚动月份等。