You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET 7.0中Log4Net无法写入日志文件问题求助

ASP.NET 7.0中Log4Net日志文件空内容问题解决

核心问题分析

你在StartUpBase中配置了Log4Net的ILog实例并注入到DI容器,但控制器里使用的是ASP.NET Core原生的ILogger<T>接口——这是两套独立的日志体系。控制台输出是原生日志框架的默认行为,Log4Net的配置虽然加载成功(文件能创建),但没有被实际调用,所以文件里没有日志内容。


解决方案1:直接使用Log4Net的ILog接口

修改控制器代码,注入Log4Net的ILog而非原生日志接口:

using log4net;

[ApiController]
[Route("api/[controller]")]
public class Root : Controller
{
    private readonly ILog _logger;

    public Root(ILog logger)
    {
        _logger = logger;
        _logger.Debug("Hello DEBUG");
        _logger.Info("Hello INFO");
        _logger.Warn("Hello WARNING");
        _logger.Error("Hello ERROR");
    }
}

同时确保项目已正确引用Log4Net的NuGet包,版本适配ASP.NET 7.0。


解决方案2:将Log4Net集成到原生日志框架(推荐)

这种方式可以继续使用原生ILogger<T>,同时让日志通过Log4Net输出到文件:

  1. 安装NuGet包:Microsoft.Extensions.Logging.Log4Net.AspNetCore
  2. 修改Program.cs,添加Log4Net作为日志提供者:
class ServiceTemplate
{
    static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
            .ConfigureLogging(logging =>
            {
                // 可选:移除默认控制台提供者,如需保留则删除此行
                logging.ClearProviders();
                // 加载Log4Net配置文件
                logging.AddLog4Net("log4net.config");
            })
            .UseStartup<Startup>()
            .Build();
    }
}
  1. 删除StartUpBase中手动配置Log4Net的代码(LogManager.CreateRepository、XmlConfigurator.Configure等),因为现在由原生日志框架接管集成。
  2. 保持log4net.config和控制器的ILogger<Root>代码不变,此时日志会按照配置输出到文件和控制台。

额外检查项

确保log4net.config文件在Visual Studio中的复制到输出目录属性设置为「始终复制」或「如果较新则复制」,避免部署时找不到配置文件。

内容的提问来源于stack exchange,提问作者Pixma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:03:13