【问题标题】:Best way to add logging in existing application (windows or web) .Net在现有应用程序(Windows 或 Web).Net 中添加日志记录的最佳方式
【发布时间】:2009-05-29 23:53:14
【问题描述】:

我继承了几个没有添加任何跟踪或日志记录的 .Net (C#) 应用程序。此应用程序执行从创建、读取、更新和删除记录的所有操作。它发送电子邮件并调用网络服务。

当然,维护它是一场噩梦,因为没有日志记录,也没有 try catch 机制(我知道我也不敢相信)。

那么在这个系统中实现日志记录的最佳方式是什么。我不能去每个函数调用并添加日志记录行。有什么方法可以让我进行动态日志记录,该日志记录可以根据我提供的方法名称进行记录。

I.E.当 UpdateOrder() 被调用时,我的记录器应该记录(更新的 order 方法被调用)

谢谢

【问题讨论】:

  • 你能提供更多关于语言和平台的信息吗?
  • 对不起...它们内置于 .Net 3.5 , C# , ASP.Net

标签: c# .net logging


【解决方案1】:

使用 log4net,它是 Apache log4j 的 .NET 版本。该库经过良好测试,可供各地程序员使用,并且非常可定制。由于您已经继承了此代码,因此通过它并开始添加日志记录支持并不是一件坏事。

自定义设置通过项目中的全局文件进行处理,可以指定日志信息的去向(电子邮件、文本文件、控制台)以及每个日志信息输出源所需的详细程度。

【讨论】:

    【解决方案2】:

    您可以使用像 Postsharp 这样的 AOP 框架来创建一个特定的属性来记录方法调用:

    public class TraceAttribute : OnMethodBoundaryAspect 
    { 
      public override void OnEntry( MethodExecutionEventArgs eventArgs) 
      { Trace.TraceInformation("Entering {0}.", eventArgs.Method);  } 
    
      public override void OnExit( MethodExecutionEventArgs eventArgs) 
      { Trace.TraceInformation("Leaving {0}.", eventArgs.Method);   } 
    }
    

    (此代码是主页上的示例)

    然后您可以将此属性应用于您要记录的方法:

    [Trace]
    public void UpdateOrder()
    {
        ...
    }
    

    【讨论】:

    • PostSharp 是解决这个问题的一个很好的解决方案。不过,该属性的缺点是必须修改代码。一种更好(侵入性较小)的方法是在 PostSharp 中使用 MultiCastAttribute,您只需指定一个属性即可告知哪些类型(或方法)受到影响: [assembly: MyOnMethodInvocationAspect( AttributeTargetAssemblies = "mscorlib", AttributeTargetTypes = "System.Threading.*")] 将使 postsharp 拦截对 System.Threading.* 中任何类的每次调用(参见doc.postsharp.org 中的更多内容)
    【解决方案3】:

    如果你在 .NET 中,这里有一些东西:

    http://www.codeproject.com/KB/dotnet/LoggerByHernandson.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-10
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多