2013-06-14 11 views
20

Ich schrieb log4net eine Testkonsolenanwendung in C#:Warum wird log4net nicht in der Konfigurationsdatei erkannt?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

using log4net; 
using log4net.Config; 

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

namespace Log4Net_Test 
{ 
    class Program 
    { 
     private static readonly ILog log = LogManager.GetLogger(typeof(Program)); 

     static void Main(string[] args) 
     {  
      log.Info("Entering application");  
      log.Debug("Debug message");  
      log.Info("Leaving application"); 
     } 
    } 
} 

Meine App.config Datei sieht wie folgt aus:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
    <log4net> 
    <!-- A1 is set to be a ConsoleAppender --> 
    <appender name="A1" type="log4net.Appender.FileAppender"> 
     <file value="logfile.txt" /> 
     <appendToFile value="false" /> 

     <!-- A1 uses PatternLayout --> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" /> 
     </layout> 
    </appender> 

    <!-- Set root logger level to DEBUG and its only appender to A1 --> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="A1" /> 
    </root> 
    </log4net> 
</configuration> 

Ausführen des Testprogramms endet in der folgenden Fehlermeldung auf:

log4net:ERROR Exception while reading ConfigurationSettings. Check your .config 
file is well formed XML. 
System.Configuration.ConfigurationErrorsException: Configuration system failed t 
o initialize ---> System.Configuration.ConfigurationErrorsException: Unrecognize 
d configuration section log4net. 

Was ist falsch an meiner Konfigurationsdatei?

UPDATE 1: Die configSections´ part was missing, as pointed out in the accepted answer. But I also had to remove the Start section, otherwise the same error appeared. I do not know why the startup` Abschnitt das Problem verursacht, auch. Vielleicht kann jemand erfahrener einen Kommentar schreiben und schreiben.

Antwort

29

Sie benötigen log4net auch

<configSections> 

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 

</configSections> 
+0

Danke , dieser Abschnitt fehlte. –

11

Der Startabschnitt hinzufügen Bedarf entfernt werden, wie auch in dem Abschnitt Block weil log4net nicht Rahmen .NET4.5 unterstützt

können Sie Siehe meine ähnliche Antwort hier: https://stackoverflow.com/a/13236410/1783224

Oder Sie können die unterstützten Frameworks in der Dokumentation sehen: http://logging.apache.org/log4net/release/features.html

+5

Ich habe es funktioniert gut mit 4.5 Startup-Block, solange die ConfigSection mit log4net davor kommt. – nathanchere

+2

Ich kann die Fix @nathanchere vorgeschlagen – tyh

+2

Dies ist falsch. Das Log4Net unterstützt .NET 4.5 sicher. – sean717

4

Sie sollten auch diesen Abschnitt Block erinnern < configSections> muss unter der < Konfiguration> sonst wird ein Fehler aufgetreten:

Exception while reading ConfigurationSettings. Check your .config file is well formed XML.

Zum Beispiel:

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 
    </configSections> 
    <!-- Log4net Logging Setup --> 
    <log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender,log4net"> 
     <file value="service.log" /> 
     <appendToFile value="true" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <!-- 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %level %logger - %message%newline" /> 
     </layout> 
     --> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%date [%thread] %-5level %logger.%method - %message%newline" /> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="INFO" /> 
     <levelMax value="FATAL" /> 
     </filter> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="FileAppender" /> 
    </root> 
    </log4net> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> 
    </startup> 
</configuration> 
+2

Wow - das hat mir geholfen! Aber es gibt noch mehr: Der configSections-Knoten muss der erste Knoten unter dem Konfigurationsknoten sein, sonst erhält er die Nachricht, die Sie erwähnt haben. – Igor

Verwandte Themen