Ich Injektion log4net wie folgt:injizierte log4net Protokolle Nachricht duplizieren
DI
container.RegisterSingleton<Func<object, ILog>>(instance => {
return LogManager.GetLogger(instance.GetType());
});
Nutzungs
public class MyClass {
private readonly ILog _logger;
public MyClass(Func<object, ILog> loggerFactory) {
_logger = loggerFactory(this);
}
}
in der Konsole bekomme ich berechenbar doppelte Mitteilungen. Der erste Satz von Nachrichten druckt einmal, die zweite zwei Mal eingestellt, stellen die sechste sechsmal, etc ...
4470 [6] INFO JobManager - Getting pending jobs...
5953 [5] DEBUG JobManager - #113: 1/14 (7.14 %)
6489 [6] INFO JobManager - Getting pending jobs...
6489 [6] INFO JobManager - Getting pending jobs...
7679 [8] DEBUG JobManager - #113: 2/14 (14.29 %)
7679 [8] DEBUG JobManager - #113: 2/14 (14.29 %)
8512 [6] INFO JobManager - Getting pending jobs...
8512 [6] INFO JobManager - Getting pending jobs...
8512 [6] INFO JobManager - Getting pending jobs...
9551 [29] DEBUG JobManager - #113: 3/14 (21.43 %)
9551 [29] DEBUG JobManager - #113: 3/14 (21.43 %)
9551 [29] DEBUG JobManager - #113: 3/14 (21.43 %)
Ehrlich gesagt, ich bin nicht sicher, warum es auch auf die Konsole da ich don einloggen Habe diesen Appender nicht konfiguriert oder aktiviert, und es funktioniert auch, wenn ich XmlConfigurator.Configure()
und die log4net-bezogenen Dinge in der Konfigurationsdatei auskommentiere. Der einzige Appender, den ich benutze, ist Gibraltar. Beachten Sie, dass ich dies von VS ausführe, nicht debugge, und habe sowohl Debug- als auch Release-Konfigurationen mit dem gleichen Ergebnis ausprobiert. Ich fügte eine Datei Appender und die Zeilen sind nicht doppelt in der resultierenden Protokolldatei.
Können Sie einen Haltepunkt für 'return LogManager.GetLogger()' setzen, nur um zu beweisen, dass Sie keine Singletons für jede Anfrage produzieren? Nur ein Gedanke ... – Waescher
Warum injizierst du einen Func und nicht einfach einen ILog? Ich bin neugierig. – CodingYoshi
@CodingYoshi So kann jeder Typ seinen eigenen Logger haben. Wenn ich deine Frage nicht falsch verstehe ...? –