C# 在现有应用程序(windows或web).Net中添加日志的最佳方法

C# 在现有应用程序(windows或web).Net中添加日志的最佳方法,c#,.net,logging,C#,.net,Logging,我继承了两个.Net(C#)应用程序,它没有添加任何跟踪或日志记录。该应用程序完成了从创建、读取、更新和删除记录的所有操作。它发送电子邮件并调用web服务 当然,维护它是一场噩梦,因为没有日志记录和try-catch机制(我知道我也不敢相信) 那么,在这个系统中实现日志记录的最佳方式是什么呢。我不能每次调用函数都添加日志行。是否有某种方法可以让动态日志记录基于我提供的方法名进行记录 例如,当调用UpdateOrder()时,我的记录器应该记录日志(调用了UpdateOrder方法) 谢谢你如果你

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

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

那么,在这个系统中实现日志记录的最佳方式是什么呢。我不能每次调用函数都添加日志行。是否有某种方法可以让动态日志记录基于我提供的方法名进行记录

例如,当调用UpdateOrder()时,我的记录器应该记录日志(调用了UpdateOrder方法)


谢谢你

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


您可以使用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()
{
    ...
}

使用log4net,它是apachelog4j的.NET版本。该库经过了良好的测试,到处都有程序员使用,而且非常可定制。既然您继承了这段代码,那么仔细阅读并开始添加日志支持并不是一件坏事


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

你能提供更多关于语言和平台的信息吗?对不起,它们是在.NET3.5、C#、ASP.NetPostSharp中构建的。对于这个问题,NetPostSharp是一个非常好的解决方案。但是,该属性的缺点是必须修改代码。一种更好的(不太侵入性的)方法是在PostSharp中使用MultiCastAttribute,您只需指定一个属性,告诉哪些类型(或方法)受到影响:[assembly:MyOnMethodInvestationAspect(AttributeTargetAssemblys=“mscorlib”,AttributeTargetTypes=“System.Threading.*)]将使postsharp截获对System.Threading.*中任何类的每次调用(请参阅中的详细信息)