2016-04-05 107 views
0

Şu anda AOP performans günlüğü yapmak için PostSharp kullanıyorum ve ProfilerAspects üzerinde bazı toplu varyasyonlar yapmak istiyorum.Arama yığını yığılmış günlük kaydı yapmak için PostSharp'u nasıl kullanırım?

İlgilendiğim bir varyasyon, günlüğe kaydetme işleminin bu özellik ile adlandırılan ilk işlev tarafından birleştirilmesidir. Ben EntryAggregatedProfiler adlı bir yönü olmasını isterdim ve iki yöntem A ve B aşağıdaki gibi: Umarım bu örnek açıkça yapmalıdır Bir giriş oluşturmak için benim profilci yönünü istiyorum

[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); 
} 

zaman A (0) denir. A (0) için günlük giriş aşağıdaki biçimde olmalıdır:

<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> 

Ve B'ye bir çağrı() İkincisi

<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> 

gibi bir günlük girişi oluşturmalısınız, ben de istiyorum Bu sınıf düzeyinde yarattık, bu nedenle yukarıdaki gibi ama a ve B her ikisi ile bir sınıf içinde yöntemlerle aynı tasarım deseni:

[ClassEntryAggregatedLogger] 
public class C 
{ 
    public int A(int depth) 
    { 
.......etc...... 
} 

Yani CA çağrısı (0) ve CB() benzer üretmelidir Yukarıdaki sonuçlar.

cevap

0

http://samples.postsharp.net/ adresindeki örneklerden ilham alabilirsiniz.

Arama yığını yansıtan girintiyi de içeren günlüğe kaydetme hakkında bir örnek vardır. Profil oluşturma ile ilgili başka bir örnek de var.

OnMethodBoundaryAspect sınıfını genişleten görünüm (kütük oluşturma veya profil oluşturma), belirli bir yönteme, sınıfa veya birden çok sınıfa/yönteme aynı anda uygulanabilir. Yani, bir sınıfın tüm yöntemlerine uygulanacak özel bir yönüne ihtiyacınız yoktur.

İlgili konular