news 2026/5/11 23:37:20

ASP.NET Core 6 + Log4net 集成指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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.AspNetCore

2. 添加 log4net 配置文件

在项目根目录新建log4net.config,并设置属性为 “复制到输出目录:如果较新则复制”。示例配置(控制台 + 文件双输出):

xml

<?xml version="1.0" encoding="utf-8" ?> <log4net> <!-- 控制台输出 --> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <!-- 文件输出(按日期滚动) --> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="logs/" /> <datePattern value="yyyy-MM-dd'.log'" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <maxSizeRollBackups value="10" /> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <!-- 根日志配置 --> <root> <level value="Info" /> <appender-ref ref="ConsoleAppender" /> <appender-ref ref="RollingFileAppender" /> </root> </log4net>

3. 在 Program.cs 中注册 log4net

csharp

运行

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. 在控制器中使用日志

直接通过依赖注入ILogger<T>即可,不需要手动创建 log4net 对象:

csharp

运行

[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> 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()); } }

三、常见问题与优化

  1. 日志文件不生成?

    • 检查log4net.config的 “复制到输出目录” 设置
    • 确认logs目录的写入权限
    • 检查配置文件中的路径是否正确
  2. 日志级别不生效?

    • 根节点的<level value="Info" />控制全局最低级别
    • 也可以单独为某个命名空间设置级别,比如:

      xml

      <logger name="Microsoft.AspNetCore"> <level value="Warning" /> </logger>
  3. 性能优化建议

    • 生产环境关闭Debug级别的日志
    • 对于高频日志,使用异步写入的BufferingForwardingAppender
    • 日志文件按日期 / 大小滚动,避免单个文件过大

四、扩展:为什么用 Log4net?

  • 成熟稳定:经过多年企业级项目验证,生态完善
  • 配置灵活:支持多输出源、过滤规则、自定义布局
  • 无缝适配:完美兼容 .NET Core 的标准日志接口,不需要修改业务代码
  • 社区支持:大量现成的配置模板和问题解决方案
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 23:34:37

Kubernetes 架构全景:从核心组件到数据流转的深度解析

引言&#xff1a;分布式系统的“操作系统” Kubernetes 并非简单的容器管理工具&#xff0c;而是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化工作负载与服务。其设计目标让部署、伸缩、运维自动化变得简单可靠。理解 K8s 架构是掌握其强大能力的起点。 本文将系…

作者头像 李华
网站建设 2026/5/11 23:33:45

从ENIAC到M1芯片:聊聊微型计算机的‘心脏’CPU是怎么一步步变强的

从ENIAC到M1芯片&#xff1a;微型计算机CPU的进化史诗 1946年2月&#xff0c;当ENIAC在宾夕法尼亚大学首次亮起它的电子管时&#xff0c;没人能想到这台占地170平方米的庞然大物&#xff0c;会在70多年后演变成可以装入口袋的M1芯片。这场计算能力的革命&#xff0c;本质上是一…

作者头像 李华
网站建设 2026/5/11 23:32:11

在vSphere ESXi 7.0上跑MacOS Big Sur?这份保姆级避坑指南帮你一次搞定

在vSphere ESXi 7.0上部署macOS Big Sur的深度避坑指南 虚拟化环境中运行macOS一直是技术爱好者和企业开发者的热门需求。本文将深入探讨在vSphere ESXi 7.0平台上安装macOS Big Sur时可能遇到的各种技术难题及其解决方案&#xff0c;帮助您避开那些让大多数用户头疼的"坑…

作者头像 李华
网站建设 2026/5/11 23:32:03

GD32F303硬件I2C实战:手把手教你用AT24C02 EEPROM存储和读取设备配置参数

GD32F303硬件I2C实战&#xff1a;构建工业级参数存储系统 在嵌入式设备开发中&#xff0c;系统参数的持久化存储是个看似简单却暗藏玄机的需求。想象一下&#xff0c;当你的智能温控器经历突然断电后&#xff0c;所有用户设置的日程和偏好全部归零——这种体验足以让产品口碑崩…

作者头像 李华
网站建设 2026/5/11 23:29:03

Linux内存管理:NUMA架构下的性能调优实战

1. 为什么你的多核服务器跑不满性能&#xff1f; 最近在调试一台32核的数据库服务器时&#xff0c;遇到个奇怪现象&#xff1a;CPU使用率始终在60%左右徘徊&#xff0c;加更多并发连接也上不去。用perf工具分析后发现&#xff0c;超过30%的CPU时间都花在了内存访问上——这明显…

作者头像 李华
网站建设 2026/5/11 23:25:45

长期项目中的体感,使用Taotoken数月后对API稳定性的实际观察

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期项目中的体感&#xff0c;使用Taotoken数月后对API稳定性的实际观察 1. 项目背景与接入初衷 我们团队负责一个面向内容创作辅…

作者头像 李华