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 に答える