SORU
3 EKİM 2008, Cuma


Log4Net Kapsayıcı bir sınıf nasıl olurdu?

Günlüğü bir çerçeve için arıyorum .(c#) net ve log4net vermeye karar verdi bir stackoverflow üzerinde cevap threads/birkaç soru üzerine okuyup sonra buraya gidin. Log4net için sarıcı sınıfı kullanan insanlar üzerinde söz ve görüyorum ve bunun nasıl olacağını merak ediyorum.

Benim kodu farklı projelere (veri erişimi/iş/Java eklentisi/..) ayrıldı. Nasıl log4net kapsayıcı bir sınıf gibi görünecektir? Sarıcı sınıf tüm projelerin dahil edilmesi gerekir? Ayrı bir proje olarak hep birlikte inşa etmeli miyim?

Sarıcı singleton bir sınıf olmalıdır?

CEVAP
3 EKİM 2008, Cuma


Aslında bir arayüz ve doğrudan Log4net sınıfları ve yöntemleri sarar arayüzü somut bir uygulama oluşturun. Ek günlük sistemler bu sistemler, diğer sınıflar ve yöntemler şal daha somut sınıflar oluşturarak sarılmış olabilir. Son olarak kod değişikliği yapılandırma ayarı veya bir çizgi dayalı kağıdı örneklerini oluşturmak için bir fabrika kullanın. (Not: daha esnek ve*.* 7 Inversion of Control bir kabı kullanarak karmaşık) alabilirsiniz

public interface ILogger
{
    void Debug(object message);
    bool IsDebugEnabled { get; }

    // continue for all methods like Error, Fatal ...
}

public class Log4NetWrapper : ILogger
{
    private readonly log4net.ILog _logger;

    public Log4NetWrapper(Type type)
    {
        _logger = log4net.LogManager.GetLogger(type);
    }

    public void Debug(object message)
    {
        _logger.Debug(message);
    }

    public bool IsDebugEnabled
    {
        get { return _logger.IsDebugEnabled; }
    }

    // complete ILogger interface implementation
}

public static class LogManager
{
    public static ILogger GetLogger(Type type)
    {
        // if configuration file says log4net...
        return new Log4NetWrapper(type);
        // if it says Joe's Logger...
        // return new JoesLoggerWrapper(type);
    }
}

Ve sınıflarda Bu kodu kullanarak bir örnek (statik salt okunur bir alan olarak ilan edilen):

private static readonly ILogger _logger =
    LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

Biraz daha performans dostu aynı etkiyi kullanarak alabilirsiniz:

private static readonly ILogger _logger = 
    LogManager.GetLogger(typeof(YourTypeName));

Eski örnek daha sürdürülebilir olarak kabul edilir.

Sen istemez oluşturmak için Tek bir tanıtıcı giriş çünkü Log4Net günlükleri için çağırma türü; daha temiz ve kullanışlı olması için her tür kullanın kendi logger yerine sadece görme tek bir tür günlük dosya raporlama tüm mesajları.

Uygulamanız oldukça yeniden kullanılabilir (kuruluşunuzdaki diğer projeler) olmalıdır, çünkü kendi derleme yapabilir ya da ideal olarak kendi kişisel/kuruluşunuzun çerçeve/montaj programı ile vardır. Yeniden ilan sınıfların ayrı ayrı iş/data/UI meclislerinin her birinde, bu sürdürülebilir değil.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LimeFire

    LimeFire

    2 ŞUBAT 2012
  • martin shervington

    martin sherv

    7 EKİM 2011
  • Rugiagialia

    Rugiagialia

    1 Ocak 2008