【问题标题】:How to create a debug log in C# [closed]如何在 C# 中创建调试日志 [关闭]
【发布时间】:2014-03-13 11:23:53
【问题描述】:

我正在使用 C#.net (4.5) 编写一个 Windows 应用程序 我被要求为我的软件创建一个调试日志。 我该如何创建它?我应该在每一行之后添加调试日志代码吗??

【问题讨论】:

  • 也许你应该向那些要​​求调试日志的人提出一些问题?他们打算用它做什么?这样的日志会回答什么样的问题?给谁?在哪些情况下?
  • 我在 Web 应用程序中经常使用的简单技巧:向自己发送包含错误的邮件,其中包含堆栈跟踪和异常。捕获到错误时。

标签: c# .net


【解决方案1】:

如何创建它?

只是为您指明正确的方向。您可能需要查看日志框架,例如 log4netnlogsee comparison log4net vs nloghere is some other frameworks)。

就个人而言,我使用 log4net。我喜欢它,因为这些概念在不同的其他语言(Java、C++)中是相似的。一旦了解了 log4net,就可以轻松使用 log4j 或 log4xx。

我应该在每一行之后添加调试日志代码吗?

不,你不应该。你可以,但这通常会产生太多的调试信息。明智地使用它来输出有用的有帮助的信息,这样当你的程序运行时,你可以阅读日志并了解什么时候出现了错误的方向。

【讨论】:

    【解决方案2】:

    您应该阅读面向方面的编程。您可以通过 Policy Injection Application Block、Castle、Spring.NET 等库来注入这种行为。

    【讨论】:

      【解决方案3】:

      log4net 是一种选择。您可以从 NuGet 获取它。

      然后在您的代码中编写类似的语句

      LogManager.GetLogger("UserLog").Debug("User logged in:"+user);
      

      您可以使用不同的级别,例如 Debug、Info、Error、Fatal,并配置系统以记录到不同类型的输出,例如普通文件、db 等。

      【讨论】:

        【解决方案4】:

        使用Enterprise Library,许多有用的功能,例如:
        记录应用程序块。
        开发人员可以使用此应用程序块在他们的应用程序中包含各种记录目标的记录功能.此版本添加了异步日志记录功能。

        【讨论】:

          【解决方案5】:

          一种非常简单的方法足以满足许多(单线程)情况:

          实现以下方法作为基类Util的静态方法:

          class Util
              {
                  public static bool quiet;                //  flag to shut off o() Console output
                  public static StreamWriter fOut;         //  the output file for o()
                  public static int debugLevel = 2;
          
                  public static void o(string s)
                  {    
                      if (!quiet)
                      {
                          Console.WriteLine(s);
                      }
          
                      if (fOut != null)
                      {
                          fOut.WriteLine(s);
                      }
                  }
          
                  public static void o2(string s)
                  {
                      if (debugLevel >= 2)
                      {
                          o(s);
                      }
                  }
          }
          

          您现在可以将此基类继承到您要调试的任何类,并散布对o() 的调用。由debugLevelquiet 变量控制,您现在可以在Console 或文件中获取日志信息。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-01-18
            • 2016-06-07
            • 1970-01-01
            • 2012-04-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-17
            相关资源
            最近更新 更多