ASP.NET Core 6 + Log4net 集成指南
一、核心概念ASP.NET Core 6微软推出的跨平台 Web 框架极简模式Top-level statements是它的标志性变化Log4net老牌 .NET 日志框架支持多输出源文件、控制台、数据库等、灵活的日志级别控制是企业级应用中非常常用的日志方案适配方式通过Microsoft.Extensions.Logging.Log4Net.AspNetCore包让 log4net 适配 .NET Core 的标准日志接口二、完整集成步骤1. 安装 NuGet 包在项目中安装以下两个包bash运行Install-Package log4net Install-Package Microsoft.Extensions.Logging.Log4Net.AspNetCore2. 添加 log4net 配置文件在项目根目录新建log4net.config并设置属性为 “复制到输出目录如果较新则复制”。示例配置控制台 文件双输出xml?xml version1.0 encodingutf-8 ? log4net !-- 控制台输出 -- appender nameConsoleAppender typelog4net.Appender.ConsoleAppender layout typelog4net.Layout.PatternLayout conversionPattern value%date [%thread] %-5level %logger - %message%newline / /layout /appender !-- 文件输出按日期滚动 -- appender nameRollingFileAppender typelog4net.Appender.RollingFileAppender file valuelogs/ / datePattern valueyyyy-MM-dd.log / appendToFile valuetrue / rollingStyle valueDate / maxSizeRollBackups value10 / staticLogFileName valuefalse / layout typelog4net.Layout.PatternLayout conversionPattern value%date [%thread] %-5level %logger - %message%newline / /layout /appender !-- 根日志配置 -- root level valueInfo / appender-ref refConsoleAppender / appender-ref refRollingFileAppender / /root /log4net3. 在 Program.cs 中注册 log4netcsharp运行var builder WebApplication.CreateBuilder(args); // 1. 添加 log4net 日志提供程序 builder.Logging.AddLog4Net(log4net.config); // 其他服务注册比如控制器、Swagger 等 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app builder.Build(); // 中间件配置 if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();4. 在控制器中使用日志直接通过依赖注入ILoggerT即可不需要手动创建 log4net 对象csharp运行[ApiController] [Route([controller])] public class WeatherForecastController : ControllerBase { private readonly ILoggerWeatherForecastController _logger; public WeatherForecastController(ILoggerWeatherForecastController logger) { _logger logger; } [HttpGet(Name GetWeatherForecast)] public IActionResult Get() { _logger.LogInformation(开始获取天气数据); _logger.LogDebug(调试信息参数xxx); _logger.LogWarning(警告数据可能存在延迟); _logger.LogError(模拟错误数据获取失败, new Exception(测试异常)); return Ok(Enumerable.Range(1, 5).Select(index new WeatherForecast { Date DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC Random.Shared.Next(-20, 55), Summary Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray()); } }三、常见问题与优化日志文件不生成检查log4net.config的 “复制到输出目录” 设置确认logs目录的写入权限检查配置文件中的路径是否正确日志级别不生效根节点的level valueInfo /控制全局最低级别也可以单独为某个命名空间设置级别比如xmllogger nameMicrosoft.AspNetCore level valueWarning / /logger性能优化建议生产环境关闭Debug级别的日志对于高频日志使用异步写入的BufferingForwardingAppender日志文件按日期 / 大小滚动避免单个文件过大四、扩展为什么用 Log4net成熟稳定经过多年企业级项目验证生态完善配置灵活支持多输出源、过滤规则、自定义布局无缝适配完美兼容 .NET Core 的标准日志接口不需要修改业务代码社区支持大量现成的配置模板和问题解决方案