【发布时间】:2016-04-05 19:43:53
【问题描述】:
我目前正在使用 PostSharp 进行 AOP 性能日志记录,我想在 ProfilerAspects 上做一些聚合变体。
我感兴趣的一个变体是通过使用该方面调用的第一个函数聚合日志记录。希望这个例子能说明问题:我想要一个名为 EntryAggregatedProfiler 的切面,以及两个方法 A 和 B,如下所示:
[EntryAggregatedProfiler]
public int A(int depth)
{
Thread.sleep(100); // sleep 100 milliseconds
if (depth > 0) return depth;
return A(depth + 1);
}
[EntryAggregatedProfiler]
public int B()
{
Thread.sleep(50);
return A(0);
}
我希望我的分析器方面在调用 A(0) 时创建一个条目。 A(0) 的日志条目应采用以下格式:
<function name="A">
<args>
<depth type="int">0</depth>
</args>
<function name="A">
<args>
<depth type="int">1</depth>
</args>
<callTime>105</callTime>
</function>
<callTime>210</callTime>
</function>
并且对 B() 的调用应该创建一个日志条目,例如
<function name="B">
<args />
<function name="A">
<args>
<depth type="int">0</depth>
</args>
<function name="A">
<args>
<depth type="int">1</depth>
</args>
<callTime>105</callTime>
</function>
<callTime>210</callTime>
</function>
<callTime>265</callTime>
</function>
其次,我还希望在类级别上创建它,因此与上面的设计模式相同,但 A 和 B 作为类中的方法:
[ClassEntryAggregatedLogger]
public class C
{
public int A(int depth)
{
.......etc......
}
因此调用 C.A(0) 和 C.B() 应该会产生与上述类似的结果。
【问题讨论】:
标签: logging profiling aggregate aop postsharp