log4net:ERROR ConfigureFromXml 使用 null 'element' 参数调用



我们使用的log4net库带有.net core来在文件中编写日志。但是,在执行应用程序" log4net:错误配置fromxml(时,我们会遇到此错误。这是我们的program.cs文件:

public class Program
{
    public static void Main(string[] args)
    {
        XmlDocument log4netConfig = new XmlDocument();
        log4netConfig.Load(File.OpenRead("log4net.config"));
        var repo = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
        log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);
        BuildWebHost(args).Run();
    }
    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

这是startup.cs文件中的配置方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        loggerFactory.AddConsole(LogLevel.Trace);
        loggerFactory.AddLog4Net();
        app.UseIdentityServer();
    }

这是log4net.config文件:

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
  </configSections>
  <!-- Log4net Logging Setup -->
  <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender,log4net">
      <file value="c:LogFilesApplicationsIdentityServerlog.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <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="DEBUG"/>
      <appender-ref ref="FileAppender"/>
    </root>
  </log4net>
</configuration>

用以下代码替换log4net.config:

    <?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="C:Temp" />
    <datePattern value="yyyy-MM-dd.'txt'"/>
    <staticLogFileName value="false"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <maxSizeRollBackups value="100"/>
    <maximumFileSize value="15MB"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level App  %newline %message %newline %newline"/>
    </layout>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="RollingLogFileAppender"/>
  </root>
</log4net>

实际上,接受的响应不准确,XML的问题是Log4NET配置顶部的.NET配置。原始配置文件是.NET配置文件而不是log4net文件,它与 configuration node植根于 log4net node。

另一方面,第二个配置XML是正确的,但是它替换了原始配置(也许可以用更好的配置(,不仅可以解决问题,还可以用新的配置代替原始配置。

更改的更好响应将是:

  1. configuration root节点从原始XML文件和 configSections node一起,然后将log4Nnet节点作为XML的根,从而在:

    <?xml version="1.0" encoding="utf-8" ?>
    <!-- Log4net Logging Setup -->
    <log4net>
      <appender name="FileAppender" type="log4net.Appender.FileAppender,log4net">
        <file value="c:LogFilesApplicationsIdentityServerlog.txt" />
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <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="DEBUG"/>
        <appender-ref ref="FileAppender"/>
      </root>
    </log4net>
    
  2. 如果需要

相关内容

最新更新