首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在.NET中截断日志文件的开头

问在.NET中截断日志文件的开头
EN

Stack Overflow用户
提问于 2010-02-24 23:23:01
回答 5查看 3.6K关注 0票数 4

我有一个VB.NET应用程序,可以将状态以文本格式写入日志文件。随着时间的推移,文件变得越来越大,我想知道是否有一种有效的方法来截断文件的开头。

为了简单起见,我希望指定一个文件大小(比方说2-3MB),并使用StreamWriter写入日志:

代码语言:javascript
复制
Using strm As New IO.StreamWriter(filelocation.log, True)
    strm.WriteLine("msg to write")
    strm.Close()
End Using

我考虑过使用strm.BaseStream.Length来确定要截取多少文件,但使用.SetLength将从末尾截取-这不是预期的结果。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-24 23:34:09

我强烈建议使用log4net来完成日志记录。它非常强大和灵活,并且有一种内置的方式,可以根据您指定的大小滚动日志。这不是你在这里寻找的答案,但它绝对值得一看。下面是一个示例配置,用于在调试期间执行日志记录操作:

代码语言:javascript
复制
<log4net>
    <appender name="GeneralLog" type="log4net.Appender.RollingFileAppender">
        <file value="ClientTools.log"/>
        <appendToFile value="true"/>
        <maximumFileSize value="3000KB"/>
        <rollingStyle value="Size"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%d{HH:mm:ss} [%t] %-5p %c - %m%n"/>
        </layout>
    </appender>
    <root>
        <level value="DEBUG"/>
        <appender-ref ref="GeneralLog"/>
    </root>
    <logger name="NHibernate" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="GeneralLog"/>
    </logger>
</log4net>

app.config文件中的这段代码将在应用程序文件夹中创建一个名为ClientTools.log的日志文件,以包括日期和时间的特定格式写入该文件,并以3MB大小滚动日志。

要使用记录器,我们在网页的Init()中执行此操作:公共ILog日志;

代码语言:javascript
复制
public void InitiateLogging()
{
    log4net.Config.XmlConfigurator.Configure();
    log = LogManager.GetLogger("MyApplication");
}

然后,当您想要记录某些内容时,执行以下操作:

代码语言:javascript
复制
log.Info("No resources available.");
// or
log.Fatal(exception.Message);
// or
log.Warn("Something bad may happen here.");

你不必担心创建一个流对象,关闭流,处理流等等,而且它非常DRY。

票数 2
EN

Stack Overflow用户

发布于 2010-02-24 23:38:39

一种方法可能是

  1. 逐行读取原始文件(A)
  2. 跳过不需要的行
  3. 将需要的行写入另一个文件(B)。
  4. 保存文件B。
  5. 删除文件A
  6. 将文件B重命名为文件A
票数 0
EN

Stack Overflow用户

发布于 2010-02-24 23:57:32

您可以检查File-Length并以硬(脏)的方式截断它:

代码语言:javascript
复制
  If New FileInfo("yourFilePathHere").Length > (2 ^ 21) Then
        File.WriteAllText("yourFilePathHere", _
        File.ReadAllText("yourFilePathHere").Substring(ToInt32(2 ^ 21)))
  End If
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2327079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档