1

我刚刚开始使用 Postsharp 作为在项目上进行日志记录等的一种方式,并且遇到了一个我尚未解决的问题。

在我的项目中,我创建了我的 LogAttribute,它正确地注销了我正在尝试执行的信息,例如参数输入和输出方法。唯一的问题是它也对所有构造函数都这样做,我不想被记录下来。

有没有办法排除构造函数被注销?

我的 GlobalAspects.cs 看起来类似于:

using PostSharp.Patterns.Diagnostics;
using PostSharp.Extensibility;

[assembly: TraceAttribute(AttributeTargetTypes = "myNamespace.toLog.*", AttributeTargetTypeAttributes = MulticastAttributes.Public, AttributeTargetMemberAttributes = MulticastAttributes.Public)]

我的属性中的 OnEntry、OnSuccess 和 On Exception 方法都是以下方面的变体:

        StringBuilder output = new StringBuilder();
        output.Append("Entering: ");
        output.Append(this.methodName);

        for (int i = 0; i < args.Arguments.Count; i++)
        {
            output.Append("  Argument: " + i + " - ");
            output.Append(args.Arguments.GetArgument(i) ?? "null");
        }

        m_logger.Trace(output);
4

1 回答 1

5

通过将以下内容添加到属性声明中,似乎已经解决了该问题:

[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
[Serializable]
public class TraceAttribute : OnMethodBoundaryAspect
{
}
于 2013-03-29T10:25:12.247 回答