我有一个winForm应用程序,其中有一个用于记录目的的文本文件。我想将其大小限制为10 MB,以便如果传递此限制并写入新数据,则删除文本文件中最旧的数据以为新数据腾出空间。任何有用的建议?
答案 0 :(得分:9)
使用一些日志框架(我建议使用NLog或log4net,两者都可以从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正是您正在寻找的。 p>
答案 2 :(得分:1)
在写入文件之前,请检查文件大小。这是一个tuto
http://www.dotnetperls.com/fileinfo-length
如果你想要更多的东西,请尝试NLog或log4net,这是其他人建议的非常有帮助的
答案 3 :(得分:1)
如果您不想使用日志记录框架(尽管您可能应该这样做),那么您可以执行以下操作:
要实现的关键是要从文件中删除比恢复到限制所需的最小值更多的东西 - 例如让文件增长到11MB,然后将其修剪回10MB。然后,您只需在每1MB的日志记录后运行一个修剪周期。如果你对此很天真,那么你会发现自己正在修剪每一条记录的线路,这很荒谬。
但实际上,已经存在的.NET的优秀日志框架是一种更好的方法 - 例如,异步日志记录和关键日常日志的滚动月份等。