Sembra più pulito dichiarare un logger e chiamare LogManager.GetLogger
in una classe base in modo che chiunque possa ereditarlo possa usarlo. Tuttavia, sul sito log4net e altri blog come in this blog post si afferma che è meglio dichiarare un logger per classe perché:Devo dichiarare logger log4net una volta per classe o in classe base?
È possibile utilizzare logger questo modo per isolare le preoccupazioni di registrazione attraverso gli oggetti, ed io tutto Consiglieresti fare così. Ciò consentirà di limitare e indirizzare l'output dei registri dai singoli logger utilizzando il meccanismo di configurazione gerarchica di log4net.
Questo significa che se lo metto in classe base, questo renderà il logger un collo di bottiglia?
Se sì, ci sono altre soluzioni o devo solo creare un logger per classe?
OP utilizza log4net. Sebbene una classe di logger sia una delle rare occasioni in cui è utile il pattern Singleton, l'utilizzo di un logger per classe migliora enormemente la risoluzione dei problemi: è possibile configurare, in modo molto dettagliato, il livello di messaggi da registrare separatamente per ogni classe. È inoltre possibile inviare messaggi da diversi logger a destinazioni diverse (file di testo, registro eventi, e-mail). Consiglio vivamente di utilizzare una libreria del genere. Se un logger viene istanziato staticamente (una volta per tipo), la differenza di prestazioni è trascurabile. (non il mio downvote, comunque) – Groo
Il tuo singleton non è thread-safe in modo che tu possa finire con diverse istanze di Logger (nel caso di un logger probabilmente non è un grosso problema, ma vale la pena notare). Inoltre, per il logging probabilmente non vorrai questo pattern come il suo più lento (dato che deve fare un extra check nullo ... di nuovo probabilmente non è un grosso problema, ma vale la pena notare). –
Non hai familiarità con log4net? –