Uygulama yöntemi günlüğü yükünü hafifletmek için Postsharp çerçevesini kullanmayı düşünüyorum. Temelde logging özelliği ile yöntemleri süslemek için bana izin verir ve derleme zamanında il içine gerekli olan logging kodu enjekte eder. Bu çözümü sevinçli zaman kodu ortamından uzak tutar. Düşünceleriniz, deneyimleriniz veya daha iyi alternatifleriniz var mı?PostSharp - il dokuma - düşünceler
cevap
AOP ile Castle Windsor DynamicProxies kullanarak günlük kaydı uygularım. Şimdiden Kale için IoC konteynerini kullanıyordum, bu yüzden AOP için kullanmak benim için en az dirençli yoldu. bilgi bana bildirin Daha fazlasını isterseniz, ben bir blog yazısı olarak serbest bırakılması için yukarı kodu toplama sürecinde olduğum
Düzenleme
Tamam, burada faily temel temel intercepter kodu, ama o her şeyi yapar İhtiyacım var. İki intercepter vardır, bir tane her bir yazma ve diğeri daha ince taneli kayıt için izin vermek için metod isimlerini tanımlamanıza izin verir. Bu çözüm Kale Windsor
Özet Taban sınıfı üzerinde faily bağlıdır
namespace Tools.CastleWindsor.Interceptors
{
using System;
using System.Text;
using Castle.Core.Interceptor;
using Castle.Core.Logging;
public abstract class AbstractLoggingInterceptor : IInterceptor
{
protected readonly ILoggerFactory logFactory;
protected AbstractLoggingInterceptor(ILoggerFactory logFactory)
{
this.logFactory = logFactory;
}
public virtual void Intercept(IInvocation invocation)
{
ILogger logger = logFactory.Create(invocation.TargetType);
try
{
StringBuilder sb = null;
if (logger.IsDebugEnabled)
{
sb = new StringBuilder(invocation.TargetType.FullName).AppendFormat(".{0}(", invocation.Method);
for (int i = 0; i < invocation.Arguments.Length; i++)
{
if (i > 0)
sb.Append(", ");
sb.Append(invocation.Arguments[i]);
}
sb.Append(")");
logger.Debug(sb.ToString());
}
invocation.Proceed();
if (logger.IsDebugEnabled && invocation.ReturnValue != null)
{
logger.Debug("Result of " + sb + " is: " + invocation.ReturnValue);
}
}
catch (Exception e)
{
logger.Error(string.Empty, e);
throw;
}
}
}
}
Tam Günlüğü Implemnetation
namespace Tools.CastleWindsor.Interceptors
{
using Castle.Core.Logging;
public class LoggingInterceptor : AbstractLoggingInterceptor
{
public LoggingInterceptor(ILoggerFactory logFactory) : base(logFactory)
{
}
}
}
Yöntem günlüğü
namespace Tools.CastleWindsor.Interceptors
{
using Castle.Core.Interceptor;
using Castle.Core.Logging;
using System.Linq;
public class MethodLoggingInterceptor : AbstractLoggingInterceptor
{
private readonly string[] methodNames;
public MethodLoggingInterceptor(string[] methodNames, ILoggerFactory logFactory) : base(logFactory)
{
this.methodNames = methodNames;
}
public override void Intercept(IInvocation invocation)
{
if (methodNames.Contains(invocation.Method.Name))
base.Intercept(invocation);
}
}
}
Merhaba Hızlı bir demo verebilirseniz harika olun - – redsquare
metodları üzerinden özniteliklerle çalışırım Giriş yapma, doğrulama, vb. Gibi çapraz kesme işleri ile ilgilenmek için Attribute'u kullanma konusunda istekli değilim. Boo tabanlı bir harici DSL kullanırım IoC Konteynerini konfigüre etmek için ben orada loglama atayım. Bu, hızlı yanıt için C# –
tezahüratları değiştirmeden günlük ekleyebilir/kaldırabildiğim anlamına gelir. Sadece giriş için kale ve IOC tanıtan bir xml yapılandırma ağrısına bir dünya içine girecek gibi geliyor. – redsquare
Bunu tam olarak yapmak için kullandınız. Harika çalışıyor! Kesinlikle tavsiye ederim!
Merhaba Joel, – redsquare
+ 1 'e gönderiliyor. Birkaç şey için kullanıyorum (C# koduna önkoşullar ve postconditions eklemek için bazı girişimler dahil) ve onsuz nasıl yapılacağını bilmiyorum ...
Ne kadar süreceğine bağlıdır. Projeyi geliştirmek ve desteklemek. Elbette, IL dokuma güzel bir teknolojidir, ancak IL ve/veya derleme meta veri formatı (1.1 ve 2.0 arasında olduğu gibi) tekrar değiştiğinde ve bu değişiklikler aracı yeni formatla uyumlu hale getirmezse ne olur?
Eğer bu araca bağımlıysanız, teknolojiyi araç desteklenene kadar yükseltmenizi önler. Bununla ilgili herhangi bir garanti verilmediyse (ya da bu gelişme devam ederse de, muhtemelen görünecektir), uzun vadeli bir projede kullanmak konusunda çok dikkatli olacağım.
Kısa vadede sorun yok.
Great point Greg için dikkat etmeniz gereken ipuçları veya püf noktaları. Teşekkürler – redsquare
PostSharp açık kaynak olduğu için geliştirme, ona bağlı olduğunuz sürece devam edebilir. –
Teoride bu doğrudur, ama ne yazık ki teori ve pratiğin her zaman aynı değildir. NDoc açık kaynaklıdır ve bir zamanlar gelişmekteydi, ama şimdi uykuda yatıyor. Açık kaynak projeleri hala çevrelerinde bir topluluğa ihtiyaç duyarlar ve buna bağlıysanız, bunu sürdürmeye devam edebilirsiniz. Bu yükü istiyor musun? –
- 1. PostSharp: OnMethodInvocationAspect
- 2. IL Temsilci örneğini çağırmak için IL Emit?
- 3. Nasıl uygulanacağı hakkında düşünceler?
- 4. postsharp exception is not
- 5. PostSharp on derlemeler
- 6. Postsharp Kurulum Hatası
- 7. PostSharp OnMethodBoundaryAspect OnEntry Çalışmıyor
- 8. Iterator bloğu, IL
- 9. OpenShine - Düşünceler Sfenksin Kurulumu - Raylar
- 10. Üretim sistemlerinde AspectJ yük-zaman dokuma
- 11. postsharp ile yönlere yönlerini uygulama
- 12. PostSharp özniteliklerine nasıl argüman eklerim?
- 13. IL kodunda maxstack değerinin hesaplanması
- 14. Android için Adobe AIR hakkındaki düşünceler
- 15. Workflow Foundation ile Düşünceler ve Deneyimler 4
- 16. Yapımdan sonra PostSharp referansını kaldırılsın mı?
- 17. PostSharp kullanarak yöntem bağımsız değişkenleri nasıl değiştirilir?
- 18. Xamarin C# kodu için IL büyüklüğü?
- 19. Woocommerce ödeme sayfasında 'İl' alanı nasıl yapılmaz?
- 20. Bir DynamicMethod'dan IL bytearray'i nasıl alabilirim?
- 21. Bu durumda 'br.s' IL opcode neden kullanılıyor?
- 22. Bu IL talimatında -2'nin anlamı nedir?
- 23. Bayt dizisinden IL almak için API
- 24. Bir çeşit Java/Scala görüntüsüne bayt dizisi. Performansla ilgili düşünceler
- 25. Kullanıcıları Anonim Tutmak - Sadece Güvenli DB Seçeneği - Genel Düşünceler?
- 26. PostSharp özniteliğinin özelliklerini eşleştirmek için en kolay yol
- 27. PostSharp ve Castle Dynamic Proxy arasındaki fark nedir?
- 28. Postsharp Methodboundry yönü WCF Service sınıfı ile çalışmadı
- 29. .Net Core standart IL ile aynı IL'yi üretir mi?
- 30. Nasıl özellik dalları oluşturmak ama Takımı İl oluşturduk
Aynı şeyi düşünüyordum. İnsanların ne düşündüğünü duymak isterim. –
Evet, bir kaç haftalığına beni rahatsız ettim - ama derleme süresinin genelindeki ek yük kayıt kodu eksikliğine değdiğini düşünüyorum, herkesin kullandığını duymak harika. – redsquare