C# WCF中的通用日志记录方法名称和用户
对于每个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方法中。我是否可以创建一个
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());
}