如果错误日志记录失败,该怎么办?如何测试其在生产中的正常工作?

Joh*_*ski 4 c# asp.net error-handling error-logging enterprise-library

  1. 如果错误记录代码失败,该怎么办?
  2. 您如何确定其当前正常工作?
  3. 您怎么知道它是否不起作用?
  4. 您如何测试其在生产环境中的正常工作?
  5. 如果其他所有方法都失败,是否应该抛出异常?

下面的代码使用Microsoft的企业库日志记录应用程序块。您如何使其“更好”?

using Microsoft.Practices.EnterpriseLibrary.Logging;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // Trying to write some data to the DB
            ...
        }
        catch (Exception ex)
        {
            LogHelper.LogException(ex, "Trying to write to the DB");
        }
    }
}

public class LogHelper
{
    public static void LogException(Exception ex, string exceptionType)
    {
        try
        {
            // Simplified version, only logging the message
            Logger.Write(exceptionType);
        }
        catch
        {
            // What do you do here???
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ron*_*age 5

我的应用通常会针对错误执行两项操作。第一种是将其写入本地日志文件(即使它也使用某种类型的数据库日志记录)。然后,它将错误的电子邮件发送到为支持而设置的通讯组列表。

因此,如果数据库日志写入失败,则错误仍然存​​在于本地日志文件中,并且还会通过电子邮件发送。

如果电子邮件失败,该错误仍会记录下来,以便您以后可以解决问题。

拥有更多的容错能力仅对极端关键任务的应用程序IMHO值得。


Tre*_*reb 3

请参阅我的相关问题中的答案:

如果其他一切都失败了,请在您的 catch 块中使用“最后手段日志记录”。将异常记录到文本文件中不太可能失败的位置。如果最后的手段日志记录因抛出另一个异常而失败,您可以吞掉该异常,或者终止您的应用程序并将错误显示为消息框。

在这种特定(例外)情况下,吞下异常是不终止应用程序的唯一方法。