C# WCF中的通用日志记录方法名称和用户

C# WCF中的通用日志记录方法名称和用户,c#,wcf,logging,C#,Wcf,Logging,对于每个WCF方法,我需要在调用该方法后立即有一条日志消息,在该方法结束后有另一条日志消息。例如,代码可能如下所示: public string Method1() { try { Log("Method1 start"); /*implementation is here*/ } finally { Log("Method1 end"); } } 这两个日志需要包含WCF方法名。现在我需要将其添加到所有WCF方法中。我是否可以创建一个

对于每个WCF方法,我需要在调用该方法后立即有一条日志消息,在该方法结束后有另一条日志消息。例如,代码可能如下所示:

public string Method1() 
{ 
  try {
    Log("Method1 start"); 
    /*implementation is here*/ 
  } 
  finally 
  { 
   Log("Method1 end");
  } 
}

这两个日志需要包含WCF方法名。现在我需要将其添加到所有WCF方法中。我是否可以创建一个通用方法来执行此操作,这样我就不需要在每次WCF调用中重复编写此操作?

您要查找的是
拦截器。WCF使您能够在请求处理的不同阶段添加拦截器

实现一个截取器,它看起来像您的示例。 有关


我建议您的拦截器函数如下所示: 要获取方法名,请查看以下内容


  • 我通常也会在
    输入
    消息中打印输入参数上的值(如果有),如果返回值,也会在
    退出时打印。让日志阅读变得更加有用

您正在寻找的是面向方面的编程

AOP有不同的风格,处理诸如日志记录之类的交叉问题

  • WCF拦截(见@Gilad回答)
  • IoC拦截(使用WCF有点棘手,请参阅更多)
  • 后夏普
PostSharp是一个非常好的工具,它在构建时实现AOP,而WCF和IoC拦截是在运行时完成的。但总的想法是一样的。 看更多

{
    try
    {
        Log(string.Format("Entering method: {0}",/*function name*/));
        //proceed with execution
        Log(string.Format("Exiting method: {0}",/*function name*/));
    }
    catch (Exception exception)
    {
        Log(string.Format("Exiting method {0} with failure: {1}:,/*function name*/,exception.ToString());
}