为什么配置文件中无法识别log4net?

Joh*_*ood 24 c# log4net

我使用log4net在C#中编写了一个测试控制台应用程序:

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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的App.config文件看起来像这样:

<?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>
Run Code Online (Sandbox Code Playgroud)

执行测试程序最终会出现以下错误消息:

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. 
Run Code Online (Sandbox Code Playgroud)

我的配置文件有什么问题?

更新1:configSections´ part was missing, as pointed out in the accepted answer. But I also had to remove the启动section, otherwise the same error appeared. I do not know why thestartup`部分导致了问题,太.也许更有经验的人可以讲述并撰写评论.

Mas*_*uso 35

您还需要log4net在section块中添加

<configSections>

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

</configSections>
Run Code Online (Sandbox Code Playgroud)


Mil*_*kov 14

还需要删除启动部分,因为log4net不支持Framework .NET4.5

你可以在这里看到我的类似答案:https://stackoverflow.com/a/13236410/1783224

或者您可以在文档中看到支持的框架:http://logging.apache.org/log4net/release/features.html

  • 只要带有log4net的configSection出现在它之前,我就可以使用4.5启动块. (6认同)
  • 我可以确认修复@nathanchere建议 (2认同)
  • 这是不正确的.Log4Net肯定支持.NET 4.5. (2认同)