2017-06-13 2 views
1

Ich habe die folgende log4net-Konfiguration. Aus irgendeinem Grund funktioniert der "root" -Logger, den der "logger" -Logger nicht hat. Ich habe versucht, den Inhalt der beiden zu wechseln, und der andere wird anfangen zu arbeiten, während derjenige, der in "Logger" ist, nicht funktioniert.Log4net Root Logger funktioniert, andere nicht

Das Debuggen von log4net scheint nichts auszugeben ...? Überprüfte Konsole, wo ich höre, dass es ausgegeben werden soll.

Irgendwelche Ratschläge?

Vielen Dank !!

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
    <configSections> 
    <section name="log4net" 
     type="log4net.Config.Log4NetConfigurationSectionHandler, 
      log4net"/> 
    </configSections> 
    <log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline"/> 
     </layout> 
    </appender> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="Log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %level %logger - %message%newline" /> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="INFO" /> 
     <levelMax value="FATAL" /> 
     </filter> 
    </appender> 
    <root> 
     <level value="INFO" /> 
     <appender-ref ref="ConsoleAppender" /> 
    </root> 
    <logger name="ConsoleLogger"> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </logger> 
    </log4net> 
</configuration> 

Der Code, den ich in der C# bin mit ist:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log.config", Watch = true)] 

private static readonly ILog Logger = LogManager.GetLogger(typeof(Feeder)); 

Logger.Info("Message to Log"); 
+0

So vermutlich wie Sie Code haben 'log = LogManager. GetLogger ("KonsolenLogger") '? – stuartd

+0

Danke stuartd, ich habe den Code am Ende hinzugefügt. –

Antwort

1

Ihr Problem ist, dass Sie einen Namen Logger erstellt haben - ConsoleLogger - aber dann Objekt, das Sie lösen ein Protokoll auf der Grundlage Ihrer Feeder Typ Name.

Da es keinen definierten Logger namens E.G.Namespace.Feeder gibt, greift log4net auf den Root Logger zurück, was Sie bereits gesehen haben.

Um die ConsoleLogger Sie es nach Namen fragen müssen, zu verwenden:

private static readonly ILog Logger = LogManager.GetLogger("ConsoleLogger"); 

(Oder alternativ umbenennen in der Konfigurationsdatei)

+0

Das erklärt tatsächlich, was passiert. Weißt du, wie man eine zweite Wurzel hat, eine, die alles in die Datei schreibt, eine, die alles auf die Konsole schreibt, ABER sie haben unterschiedliche Protokollierungsstufen? Ich weiß, wie man es macht, wenn beide den gleichen Logging-Level haben. Danke Stuart !! –

+0

Grund ist, weil ich mehrere Feeder habe, die jeweils mit ihrer eigenen Klasse laden. Wäre nett, sich irgendwann einzeln und problemlos für einzelne Klassen anmelden zu können, aber auch für alle Orte mit unterschiedlichen Levels zu protokollieren. –

+1

Sie haben zwei Möglichkeiten - 1) definieren Sie alles in der Konfigurationsdatei oder 2) setzen Sie die Ebenen dynamisch zur Laufzeit. – stuartd