0

私は次のことをしたいと思います:

LoggingAspectという名前のクラスにロギングアスペクトが実装されているとします。マルチキャスト属性機能を使用して、あるログレベルでログを記録するようにアセンブリ全体を構成したいと思います。ここで、アセンブリ内の特定のクラスにわずかに異なるログレベルを持たせたいとします。クラス全体またはそのクラス内の特定のメソッドを装飾し、その結果、指定されたクラスまたはメソッド指定されたレベルのログメッセージを取得します。

私の質問は次のとおりです。

  1. PostSharpでそれを行うことは可能ですか?
  2. 可能であれば、どのように指定してください。

ありがとう

4

1 に答える 1

0

PostSharpのドキュメントを読んだ後、解決策は、メソッドにアスペクト属性で注釈を付けてから、At​​tributeReplace=trueを指定することであるように思われます。これが私の質問に対する完全な解決策です。

コンストラクターでTraceLevelを取得するLoggingAspectAttributeという名前のクラスでロギングアスペクトを定義したとしましょう。AssemblyInfo.csに、次の定義を追加します。

[assembly: TracingAspect(TraceLevel.Info,
    AttributeTargetTypes = "PostSharp2.*",
    AttributeTargetTypeAttributes = MulticastAttributes.Public,
    AttributeTargetMemberAttributes = MulticastAttributes.Private | MulticastAttributes.Public)]

PostSharp2は、ソリューションのテストに使用したアセンブリの名前です。この定義により、すべてのトレースがInformationTraceLevelになります。

この定義を上書きするには、次のようにします。

[TracingAspect(TraceLevel.Warning, AttributeReplace = true)]
private static void Bar()
{
    Console.WriteLine("Inside Bar");
}

これにより、BarのトレースメッセージはWarning TraceLevelになり、他のすべてのメッセージはInformationトレースレベルのままになります。

ここで、AttributeReplaceプロパティを省略し、属性アノテーションを次のように残す場合:

[TracingAspect(TraceLevel.Warning)]
private static void Bar()
{
    Console.WriteLine("Inside Bar");
}

Barから2つのトレースメッセージが表示されます。1つは情報レベルで、もう1つは警告レベルです。

それが誰かを助けることを願っています。

于 2012-06-15T16:39:27.837 に答える