Log4Net 未写入文件

问题描述 投票:0回答:1

我在使用 Log4NET 与 ASP.NET 7.0 时遇到问题,它不会写入我的日志文件,但他会创建日志文件并写入控制台。 所以我读了很多关于程序集参考、log4net 布局模式等的内容,但没有任何效果。在 StartupBase 中,我通过传递 log4net.config 来配置 Log4Net。 找到 log4net.config ,我通过重命名来测试它。 重命名后,文件也发生了变化。所以,我认为配置文件已找到。

StartUpBase.cs

public class StartUpBase
{
   public ILog Logger { get; set;  }

   public void ConfigureServiceBase(IServiceCollection services)
   {
       var repo = LogManager.CreateRepository(
       Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
       XmlConfigurator.Configure(repo, new FileInfo("log4net.config"));
       Logger = LogManager.GetLogger(typeof(StartUpBase));
       services.AddSingleton(typeof(ILog), Logger);
   }

}

Startup.cs

public class Startup : StartUpBase
{
    public Startup(IWebHostEnvironment env, IConfiguration configuration) : base(env, configuration)
    {
        
    }

    public void ConfigureServices(IServiceCollection services)
    {
        ConfigureServiceBase(services);
      
        ...
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        ...
    }
}

程序.cs

  class ServiceTemplate
  {
      static void Main(string[] args)
      {

          BuildWebHost(args).Run();

      }

      public static IWebHost BuildWebHost(string[] args)
      {
          return WebHost.CreateDefaultBuilder(args)
           .UseStartup<Startup>()
           .Build();
      }
  }

根控制器

[ApiController]
 [Route("api/[controller]")]
 public class Root : Controller
 {
     public Root(ILogger<Root> Logger)
     {
         Logger.LogDebug("Hello DEBUG");
         Logger.LogInformation("Hello DEBUG");
         Logger.LogWarning("Hello DEBUG");
         Logger.LogError("Hello DEBUG");
     }
  }

log4net

<log4net debug="true">
  <root>
    <level value="ALL" />
    <appender-ref ref="Console" />
    <appender-ref ref="RollingFile" />
  </root>
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="C:\Repository\ShareSoftware\Logs\ServiceTemplate.log" />
    <staticLogFileName value="true" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <maxSizeRollBackups value="100" />
    <maximumFileSize value="5MB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>
  <appender name="Console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <!-- Pattern to output the caller's file name and line number -->
      <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
    </layout>
  </appender>
</log4net>
c# asp.net visual-studio-2022 log4net .net-7.0
1个回答
0
投票

我找到原因了。在我的 StartUpBase 中,我将一个 Logger 实例从 ILog (Log4Net) 类型绑定到 service.AddSingleton(...)。在我的控制器中,在构造函数中绑定了 ILogger (Microsoft.Extensions.Logging)。这是其他 Logger 库,因此无法工作。经过这个小修复后,它就可以工作了:

   public Root(ILog Logger)
   {
       Logger.Debug("Hallo DEBUG");
       Logger.Info("Hallo DEBUG");
       Logger.Warn("Hallo DEBUG");
       Logger.Error("Hallo DEBUG");
   }
© www.soinside.com 2019 - 2024. All rights reserved.