2013-06-14 18 views
20

Napisałem aplikację konsoli testowy w C# za pomocą log4net:Dlaczego log4net nie jest rozpoznawany w pliku konfiguracyjnym?

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"); 
     } 
    } 
} 

Mój plik App.config wygląda następująco:

<?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> 

realizującym program testowy kończy się w następujący komunikat o błędzie:

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. 

Co jest nie tak z moim plikiem konfiguracyjnym?

UPDATE 1: configSections´ part was missing, as pointed out in the accepted answer. But I also had to remove the uruchamiania section, otherwise the same error appeared. I do not know why the sekcja startup` powoduje problemy zbyt. Być może ktoś bardziej doświadczony może powiedzieć i napisać komentarz.

Odpowiedz

29

Trzeba dodać log4net również w bloku sekcji

<configSections> 

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

</configSections> 
+0

Dziękuję , tej sekcji brakowało. –

11

sekcji Uruchamianie musiała zostać usunięta, a także dlatego log4net nie obsługuje ramową .NET4.5

Ty możliwe, zobacz moją podobną odpowiedź tutaj: https://stackoverflow.com/a/13236410/1783224

Lub możesz zobaczyć obsługiwane frameworki w dokumentacji: http://logging.apache.org/log4net/release/features.html

+5

Mam to działa dobrze z 4.5 bloku uruchamiania, o ile configSection z log4net jest przed nim. – nathanchere

+2

Mogę potwierdzić poprawkę @nathanchere zasugerowaną – tyh

+2

To jest niepoprawne. Log4Net obsługuje na pewno .NET 4.5. – sean717

4

Należy również pamiętać, że blok sekcja < configSections> musi być pod konfiguracji < > inaczej będzie wystąpił błąd:

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

na przykład:

<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 - to mi pomogło! Ale jest jeszcze więcej: węzeł configSections-HAS TO BE PIERWSZY węzeł pod węzłem konfiguracyjnym, inaczej otrzymasz tę wiadomość, o której wspomniałeś. – Igor

Powiązane problemy