c# - 将日志文件保持在一定大小以下

标签 c#

我保留了几个文本日志文件,希望它们不会变得太大。我搜索并发现很多人问同样的事情,我发现了几个看起来效率有问题的解决方案,所以我尝试滚动我自己的功能。我之前在 VB6 中做了同样的事情,并最终在我所有的应用程序中使用了这个函数,所以我知道我现在会在我的 C# 程序中经常使用它。这可能应该是 CW,但由于将问题标记为 CW 已禁用,我将其发布在这里。我的问题是,因为我会经常使用它,它是否有效,如果不是,我应该改变什么来改进它?目前我将日志文件限制为 1MB,这些是我保存的最大日志,所以我预计它们不会变大。

private static void ShrinkFile(string file)
{
    StreamReader sr = new StreamReader(file);
    for (int i = 0; i < 9; i++) // throw away the first 10 lines
    {
        sr.ReadLine();
    }
    string remainingContents = sr.ReadToEnd();
    sr.Close();
    File.WriteAllText(file, remainingContents);
}

最佳答案

除了建议您使用适当的日志记录框架(如 Log4Net 或 NLog(或任何其他))之外,为了改进您的代码,您至少可以确保始终使用以下命令关闭流:

private static void ShrinkFile(string file)
{
  using(var sr = new StreamReader(file))
  {
    for (int i = 0; i < 9; i++) // throw away the first 10 lines
    {
        sr.ReadLine();
    }

    // false here means to overwrite existing file.
    using (StreamWriter sw = new StreamWriter(file, false))
    {
      sw.Write(sr.ReadToEnd());
    }
  }
}

我还避免将 ReadToEnd 转换为字符串,因为您可以直接写入 StreamWriter。

关于c# - 将日志文件保持在一定大小以下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7350121/

相关文章:

c# - 摆脱 C# 中的预编译器指令

c# - 在 Exchange Web 服务 (EWS) 中处理事件时识别项目类型

c# - C# 中的友元程序集

c# - 在 Xamarin.iOS 中为 2 个依赖静态库创建绑定(bind)

javascript - url 编码组件未进入字符串服务器端

c# - 正则表达式创建 html anchor 标记

c# - Entity Framework 在查询中创建一个不存在的列

c# - 将后台安全任务与 async/await 一起使用时的正确实现

c# - 如何使用 Selenium、Webdriver、C# 在 Esri map 上绘制多边形

c# - 为什么 Task.WhenAll 返回无效?