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

时间:2016-07-08 10:05:19

标签: c# wcf logging

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

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

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

2 个答案:

答案 0 :(得分:1)

您要找的是INFO - LogMediator To: , WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: ID:xxx-59490-1467971573210-1:2:1:4:1, Direction: request, Payload: {"value":"some value"}。 WCF使您可以在请求处理的不同阶段添加拦截器。

实现一个看起来像你的例子的拦截器。 有关interceptors

的信息

我建议您的拦截器功能如下所示: 要获取方法名称,请查看此SO question

Interceptors
  • 我通常做的是输入参数的{ 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()); } 消息打印值(如果有的话),并且在返回值的情况下也打印Entering。使日志阅读变得更加有用。

答案 1 :(得分:1)

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

AOP有不同的风格,可以处理日志记录等交叉问题。

  • WCF拦截(见@Gilad回答)
  • IoC拦截(与WCF合作有点棘手,请参阅更多here
  • PostSharp

PostSharp是一个非常好的工具,它在构建时实现AOP,而WCF和IoC拦截是在运行时完成的。但总的想法是一样的。 查看更多Here