如何在不调用每个函数内部的记录器函数的情况下记录函数调用

时间:2014-07-09 04:33:06

标签: c# asp.net logging

我将函数调用记录到日志文件中。 我使用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并记录它但不可能。

请提供任何替代方法来获取正在调用的函数名称,而无需在每个函数中手动添加日志函数。

1 个答案:

答案 0 :(得分:3)

Postsharp可以帮助解决这个问题。

http://www.postsharp.net/

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]进行修饰,还应该可以创建类级别方面,您可以在其中装饰应该具有关联日志记录的类虽然我自己也没做过。