Sto tentando di impostare una libreria di registrazione comune che determina l'istanza ILog
in base allo stack corrente e quale è l'istanza migliore di ILog da utilizzare.Appendici diversi per spazio dei nomi
Ho il mio config impostare in questo modo:
<log4net>
<!-- appenders omitted -->
<root></root>
<logger name="MyAssembly.MyNamespace">
<level value="WARN" />
<!-- appender list -->
</logger>
</log4net>
e ho una classe come questa:
namespace MyAssembly.MyNamespace.SubNamespace {
public class MyClass { ... }
}
Quando provo e ottenere un'istanza di ILog
passo nella digita (var log = LogManager.GetLogger(typeof(MyClass)).Namespace);
) e voglio che rilevi che non c'è nessun logger configurato, quindi salirà di un livello nell'albero dei nomi (a MyAssembly.MyNamespace
) e poi vedrà se è configurato in quel punto.
Il problema è che il ILog
restituito per MyAssembly.MyNamespace.SubNamespace
è configurato per eventi WARN (e sopra), essenzialmente ciò che ho configurato per il suo genitore. Log4net sembra restituire ILog
quando il nome richiesto contiene un nome definito, piuttosto che quando è uguale a il nome.
Come posso ottenere che Log4net restituisca un logger valido valido quando il nome è uguale a quello definito nella configurazione?
forse Dipendenza Iniezione dell'istanza del logger sarebbe un design migliore? –
@Mitch Wheat: Vero usando qualcosa come MEF sarebbe bello, ma abbiamo un'implementazione DI-less che sto solo cercando di modificare –