SORU
2 HAZİRAN 2009, Salı


Nasıl Bağımlılık Enjeksiyon ile log4net kullanmak

Log4net sağ pıtır ve kullanım bağımlılık enjeksiyon çerçeve ile ne olup bittiğini anlamaya çalışıyorum.

Log4Net Nehir arabirimi kullanır ama beni aramayı gerektirir

LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType)

bilgi giriş yapamıyorum-her sınıf veya yöntem. Bu IoC ilkelerine karşı gelmek gibi görünüyor ve Log4Net kullanarak beni çiftler.

Bir şekilde soyutlama katmanı bir yere koyayım mı?

Ayrıca, bu gibi geçerli kullanıcı adı gibi özel özellikleri giriş yapamıyorum:

log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName;

Nasıl yapmak için hatırlamak zorunda değilim, bu saklanması her seferinde ve hala oturum geçerli yöntem koruyabilirsiniz. böyle bir şey yapmam gerekir veya tamamen işareti mi kaçırdım?

public static class Logger
{
    public static void LogException(Type declaringType, string message, Exception ex)
    {
        log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName;
        ILog log = LogManager.GetLogger(declaringType);
        log.Error(message, ex);
    }
}

CEVAP
2 HAZİRAN 2009, Salı


Ağaçlara bakmaktan ormanı göremiyorsun sanırım. Nehir ve LogManager 1:1 Apache commons günlüğü eşdeğer neredeyse hafif bir cephesi vardır, ve aslında log4net geri kalanı için kod birkaç etmeyin.

<rant>< / ^ br . Ayrıca bunu buldumhemen hemen her zamanne zaman birini oluşturur MyCompanyLogger etrafında sarıcı log4net özlüyorlar noktası kötü ve ya kaybetmek önemli ve yararlı yetenekleri çerçevesinde, atmak faydalı bilgiler, kaybetmek performans artışı mümkün kullanırken bile basitleştirilmiş Nehir arayüzü, ya da yukarıdakilerin hepsi. Diğer bir deyişle,bunun için kaplin önlemek için sarma log4net anti-pattern.< / ^ br . </rant>

Eğer enjekte etmek için ihtiyacınız varsa, logger örneği enjeksiyon etkinleştirmek ama varsayılan bir örnek oluşturmak için bir özelliği ile erişilebilir eski moda şekilde yapmak.

Her günlük mesaj da dahil olmak üzere bağlamsal bir devlet olarak, aradığın şeyi çözer olan küresel bir özellik eklemek gerekir. Geçerli yığın boyutu için bir örnek olarak:

public class TotalMemoryProperty
{
	public override string ToString()
	{
		return GC.GetTotalMemory(false).ToString();
	}
}

Başlangıç sırasında takın:

GlobalContext.Properties["TotalMemory"] = new TotalMemoryProperty();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • BurnedInDotCom

    BurnedInDotC

    3 NİSAN 2010
  • ehowhome

    ehowhome

    22 NİSAN 2009