我将函数调用记录到日志文件中。
我使用log4Net
作为相同的
public Registration Check(Registration registration)
{
loggingProvider.Entry();
//Some code Here
loggingProvider.Exit();
return something;
}
现在如果我必须输入一个函数调用,我必须在每个函数中手动添加loggingProvider.Entry()
。
有没有办法可以用最少的LOC记录给定命名空间内发生的所有函数调用?就像在一个地方编写一个函数来记录所有函数调用一样?
我尝试get the name of the function being called from the constructor /析构函数使用stacktrace
并记录它但不可能。
请提供任何替代方法来获取正在调用的函数名称,而无需在每个函数中手动添加日志函数。
答案 0 :(得分:3)
Postsharp可以帮助解决这个问题。
在http://doc.postsharp.net/method-decorator
上查看方法调用之前和之后的注入行为例如,这是从他们的网站上获取的
[Serializable]
public sealed class TraceAttribute : OnMethodBoundaryAspect
{
// This field is initialized and serialized at build time, then deserialized at runtime.
private readonly string category;
// These fields are initialized at runtime. They do not need to be serialized.
[NonSerialized] private string enteringMessage;
[NonSerialized] private string exitingMessage;
// Default constructor, invoked at build time.
public TraceAttribute()
{
}
// Constructor specifying the tracing category, invoked at build time.
public TraceAttribute(string category)
{
this.category = category;
}
// Invoked only once at runtime from the static constructor of type declaring the target method.
public override void RuntimeInitialize(MethodBase method)
{
string methodName = method.DeclaringType.FullName + method.Name;
this.enteringMessage = "Entering " + methodName;
this.exitingMessage = "Exiting " + methodName;
}
// Invoked at runtime before that target method is invoked.
public override void OnEntry(MethodExecutionArgs args)
{
Trace.WriteLine(this.enteringMessage, this.category);
}
// Invoked at runtime after the target method is invoked (in a finally block).
public override void OnExit(MethodExecutionArgs args)
{
Trace.WriteLine(this.exitingMessage, this.category);
}
}
需要跟踪的方法(在您的情况下记录)可以使用[Trace]
进行修饰,还应该可以创建类级别方面,您可以在其中装饰应该具有关联日志记录的类虽然我自己也没做过。