2013-04-29 32 views
5

.NET uygulamasında günlük kaydını uygulamak için log4net kullanıyorum. Ancak, her kullanıcı için 300kb log4net.dll dağıtmak istemiyorum, ancak bunun yerine sorun varsa ve kullanıcılara günlükleri sağlamak istiyorsanız bu dll göndermek.Log4net.dll'yi isteğe bağlı olarak nasıl yapabilirim?

Peki, dll'nin orada olup olmamasına rağmen uygulamamı çalıştırmam mümkün mü? Tabii ki dll giriş için gerekli olurdu, ancak hiçbir kayıt gerekli değilse, uygulama dll olmadan çalışmalıdır.

+0

bir eklenti yapın:

Artık logger oluşturmak ve günlüğüne mesajları "yazma" için fabrika kullanabilirsiniz. Bkz. [MEF] (http://mef.codeplex.com/). – Oded

+2

300kb? Bu bir şey değil, onu gönderin. –

+0

@SteveWellens Hiçbir şey? Exe sadece 15kb var ve yüklü olması gerekmez. –

cevap

4

Evet, bu mümkün.

Öncelikle tüm günlük yöntemleri ile bir İNTERFAZ oluşturun:

public interface ILogger 
{ 
    void Write(string message); 
    // And much more methods. 
} 

Şimdi iki örneğini oluşturmak, bir kukla örneği (o DummyLogger arama sağlar) ve Log4Net gönderilmesine gönderecek bir örneği ( Log4NetLogger).

bitirmek için, bir fabrika sınıf oluşturmak:

static public class LogFactory 
{ 
    static public ILogger CreateLogger() 
    { 
      if (/*Check if Log4Net is available*/) 
       return new Log4NetLogger(); 
      else 
       return new DummyLogger(); 
    } 
} 

Log4Net dosyası bin-klasöründe ise basitçe kontrol ederek kullanılamadığını kontrol edebilir. gibi bir şey:

File.Exists(AppDomain.CurrentDomain.BaseDirectory + "Log4Net.dll") 

Ama bunun GAC ya da her neyse bulunuyorsa gibi diğer kontrolleri yapmak istediğinizi tahmin edebilirsiniz.

ILogger logger = LoggerFactory.CreateLogger(); 
logger.Write("I am logging something!"); 
+0

Bunun çalışması için bunun için ihtiyacınız olacak log4net kitaplığını dinamik olarak yüklemek ve yansıtma yoluyla 'Log4NetLogger' nesnesini oluşturmak. Değilse, ana uygulama log4net.dll dosyasına statik bir referans içerecek ve eğer mevcut değilse başlatmayı reddedecektir. – MartinStettner

+0

@MartinStettner: Sadece test ettim. Benim çözümüm işe yarıyor. Eksik olan aksamdan nesneleri (çağrı/kullanım gerektirmeyen) içeren bir yöntemi çağırdığınızda, statik bir başvuru başarısız olur. Benim durumumda Log4NetLogger üyelerinden biri çağrılırsa statik referans başarısız olur, bu gerçekleşmeyecektir. –

+0

Günlüğünüzü nasıl yapılandırırsınız? – sgmoore

İlgili konular