应用程序日志

时间:2011-02-15 12:30:37

标签: .net winforms logging

我有一个WinForms应用程序,我需要记录所有异常(到文件,web服务,无论如何),处理和未处理。我怎么能这样做?

2 个答案:

答案 0 :(得分:8)

.NET世界中最常用的日志记录框架是log4net。

将log4net集成到您的应用程序中需要两个步骤:

  1. 配置log4.net。例如,在log4net配置示例页面上查看FileAppender。
  2. 准备课程以使用log4net:
  3. 每个类应包含用于记录的字段:

    private static ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    

    现在,只要您必须处理异常,就可以执行以下操作:

    try
    {
      // Do stuff here
    }
    catch (Exception ex)
    {
      _logger.Error("Operation failed.", ex);
    }
    

    通过这种方式,您只解决了问题的一半:处理异常

    为了捕获Windows窗体应用程序中的所有未处理的异常,您必须处理.NET框架提供的2个事件:

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
    
        Application.ThreadException += Application_ThreadException;
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
    
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
    
    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        _logger.Error("Unhandled exception.", (Exception)e.ExceptionObject);
    }
    
    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
        _logger.Error("Unhandled application exception.", e.Exception);
    }
    

    这就是全部。很容易!

    当您开始将应用程序交付给一个或多个客户时,事情会变得复杂。这是因为您需要让客户向您提供日志文件,以检查应用程序是否遇到任何问题。

    因此,您必须解决两个问题:

    1. 如何在您的申请中发生错误时收到通知?
    2. 如何获取有关异常,环境等的详细信息?

    3. 这两个问题的解决方案是使用专门的服务,将所有异常集中在一个地方,并在应用程序遇到任何异常时通知您。


      有几种服务试图解决所有这些问题,其中之一是ExceptionTail
      ExceptionTail的一个非常好的功能是它与通过custom log4net appender使用log4.net的现有应用程序无缝集成。
      这意味着您无需重新编译整个应用程序即可使用该服务。只需在应用程序的文件夹中删除一些dll,在应用程序配置文件中添加一些内容,然后就可以了。

答案 1 :(得分:2)

我没有使用它,但Exceptioneer受到高度重视......