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输出到文件:
- 安装NuGet包:
Microsoft.Extensions.Logging.Log4Net.AspNetCore - 修改
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(); } }
- 删除
StartUpBase中手动配置Log4Net的代码(LogManager.CreateRepository、XmlConfigurator.Configure等),因为现在由原生日志框架接管集成。 - 保持
log4net.config和控制器的ILogger<Root>代码不变,此时日志会按照配置输出到文件和控制台。
额外检查项
确保log4net.config文件在Visual Studio中的复制到输出目录属性设置为「始终复制」或「如果较新则复制」,避免部署时找不到配置文件。
内容的提问来源于stack exchange,提问作者Pixma
相关产品推荐
相关产品推荐

