【问题标题】:Logging Errors and then Printing them Out记录错误然后打印出来
【发布时间】:2016-05-30 23:51:50
【问题描述】:
List<string> errorLog = new List<string>();

foreach (DirectoryInfo dir in directories)
{
    try
    {
        dir.Delete(true);
    }
    catch (System.IO.IOException msg)
    {
        code = 5;
        errorLog.Add(String.Concat(dir.FullName, " ", msg.Message));
        Console.WriteLine("Error Removing the directory: {0}", dir.FullName);
    }
}

我有一个for each 循环,它将遍历目录列表并删除它们,但保留父目录。如果发生错误,我想记录它。我创建了一个list 并在catch 中添加了错误。最后,我可以检查 errorLog 列表的长度,如果它大于零,我可以打印它们。我已经看到他们在 catch 中调用 usingstreamwriter 的帖子,但是如果在编写错误日志时发生了什么会发生什么?

我正在做的事情被认为是不好的做法吗?如果是这样,我该怎么办?

【问题讨论】:

  • 登录到控制台不是很好,我至少会登录到一个文本文件。您正在开发什么类型的应用程序?如果它是基于 Web 的应用程序,我会使用 log4net 之类的日志记录包或类似的东西。如果您有可用的数据库,我会登录到数据库。记录到文件或数据库使查看日志变得更加容易,并且在一天结束时,您可以创建日志以在出现问题时查看它们,越快越好。
  • @JeffFinn - 一个简单的命令行应用程序。我确实输出到文本文件。当 for each 完成后,如果错误日志大于 0,我将写入一个文本文件。

标签: c# error-handling try-catch


【解决方案1】:

我认为你的想法是对的。有很多解决方案,但最近我尝试将控制台输出重新路由到文件,并且效果很好。关于您的解决方案,它看起来像:

try
{
    FileStream oStream;
    StreamWriter sWriter;
    var oldOut = Console.Out;
    var desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    const string outputFileName = "\\errorlog.txt";
    var fullPath = string.Concat(desktopPath, outputFileName);
    Console.SetOut(sWriter);

    foreach (DirectoryInfo dir in directories)
    {
       try
       {
           dir.Delete(true);
       }
       catch(System.IO.IOException msg)
       {
           code = 5;
           errorLog.Add(String.Concat(dir.FullName," ",msg.Message));
           Console.WriteLine("Error Removing the directory: {0}", dir.FullName);
       }
    }
}
catch(Exception e)
{
    //handle error with streams or file
}
finally
{
    //ensures that we close the connections and such
    Console.SetOut(oldOut);
    sWriter.Close();
    oStream.Close();
}

finally 块确保如果发生任何未处理的事情,流和文件仍将关闭。

【讨论】:

  • 我习惯使用using 声明,但我明白了你的想法,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
相关资源
最近更新 更多