2013-06-14 32 views
20

Tôi đã viết một giao diện điều khiển ứng dụng thử nghiệm trong C# sử dụng log4net:Tại sao log4net không được nhận dạng trong tệp cấu hình?

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

tập tin App.config của tôi trông như thế này:

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

Thực thi các chương trình thử nghiệm kết thúc trong các thông báo lỗi sau:

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. 

Điều gì xảy ra với tệp cấu hình của tôi?

UPDATE 1: Các configSections´ part was missing, as pointed out in the accepted answer. But I also had to remove the khởi động section, otherwise the same error appeared. I do not know why the phần startup` gây ra vấn đề, quá. Có lẽ ai đó có kinh nghiệm hơn có thể nói và viết bình luận.

Trả lời

29

Bạn cần phải thêm log4net cũng trong phần khối

<configSections> 

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

</configSections> 
+0

Cảm ơn bạn , phần này bị thiếu. –

11

Phần khởi động cần phải được loại bỏ cũng vì log4net không hỗ trợ Khung .NET4.5

Bạn có thể xem câu trả lời tương tự của tôi tại đây: https://stackoverflow.com/a/13236410/1783224

Hoặc bạn có thể thấy các khung được hỗ trợ trong tài liệu: http://logging.apache.org/log4net/release/features.html

+5

Tôi đã làm việc tốt với 4.5 khối khởi động, miễn là configSection với log4net xuất hiện trước nó. – nathanchere

+2

Tôi có thể xác nhận sửa lỗi @nathanchere đề xuất – tyh

+2

Điều này không chính xác. Log4Net hỗ trợ .NET 4.5 cho chắc chắn. – sean717

4

Bạn cũng nên nhớ rằng khối phần < configSections> phải dưới < cấu hình> nếu không sẽ xảy ra một lỗi:

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

Ví dụ:

<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 - điều này đã giúp tôi! Nhưng thậm chí còn có nhiều hơn nữa: Nút configSections là nút ĐẦU TIÊN bên dưới nút cấu hình hoặc nút khác sẽ nhận được thông báo mà bạn đã đề cập. – Igor

Các vấn đề liên quan