.NET 日志库怎么选:ILogger、Serilog、NLog、log4net 横向对比

.NET 日志方案选型中文指南:内置 ILogger(Microsoft.Extensions.Logging)、Serilog、NLog、log4net 四大方案的结构化能力、配置方式、性能与维护状态对比,附选型决策建议与观测云平台接入方案。

最佳实践
.NET 日志库怎么选:ILogger、Serilog、NLog、log4net 横向对比技术指南封面

.NET 日志生态的四个主流选择——内置 ILogger 抽象、Serilog、NLog、log4net——各有清晰的适用边界。本文做一次系统的横向对比,帮你在新项目选型与老系统演进时做出不纠结的决策。

核心要点速览

  • 内置 ILogger 是抽象层而非完整方案:简单应用够用,复杂需求靠第三方 Provider 补。
  • Serilog 是新项目首选:消息模板 + 一流 JSON + Sink 生态,结构化体验最好。
  • NLog 是灵活的老牌强者:XML 路由规则表达力强,热重载友好,与 Serilog 伯仲之间。
  • log4net 只维护存量:更新稀少、无现代结构化支持,新项目不要选。

四大方案对比表

维度 ILogger(内置) Serilog NLog log4net
定位 日志抽象 + 基础 Provider 结构化日志框架 全能日志框架 老牌日志框架
结构化字段 消息模板支持 一流(消息模板 + 解构) 支持(属性 + JsonLayout) 弱(MDC 属性)
JSON 输出 需 Console JSON Provider 原生 Formatter JsonLayout 需第三方扩展
输出目的地 少量官方 Provider 数百种 Sink 丰富 Target 丰富 Appender
文件轮转 内建(滚动 Sink) 内建(archive 配置) 内建(RollingFileAppender)
配置方式 代码/配置 代码/appsettings XML/代码,热重载 XML/代码
维护状态 官方持续更新 活跃 活跃 低活跃
新项目推荐度 简单应用 ★★★★★ ★★★★ 不推荐

逐款点评

1. ILogger(Microsoft.Extensions.Logging)

.NET 官方日志抽象:六个级别、消息模板、Provider 可插拔,ASP.NET Core 深度集成。简单 Web 服务用内置 Console(JSON 模式)Provider 就能满足生产需求。它的真正价值是"面向抽象编程":业务代码只依赖 ILogger,底层换成 Serilog/NLog 只需改启动装配。

2. Serilog:结构化日志的开创者

消息模板 {UserId} + @ 解构的组合拳让结构化日志成为默认姿势;Sink 生态覆盖几乎所有目的地;UseSerilogASP.NET Core 无缝集成;LogContext 动态上下文注入优雅。新 .NET 项目的默认推荐。

3. NLog:路由规则的王者

targets/rules 两段式 XML 配置表达力极强——按 logger 名/级别分流、降噪、多目标各配格式,autoReload 热重载对生产调级别非常友好。JsonLayout 输出质量不输 Serilog。与 Serilog 的选择更多看团队口味。

4. log4net:功勋老将

log4j 移植,概念(Logger/Appender/Layout)影响了一代 .NET 工程师。稳定可靠但更新稀少,无原生 JSON 与消息模板。存量系统继续维护,新项目不引入。

选型决策建议

  1. 新项目默认:ILogger 抽象 + Serilog Provider(UseSerilog),兼得标准抽象与最强结构化;
  2. 偏好 XML 声明式配置/复杂路由:NLog;
  3. 极简微服务:纯内置 ILogger + Console JSON Provider;
  4. log4net 存量:维护为主,新代码面向 ILogger 编程,逐步收敛。

观测云落地:一套接入打天下

四个方案的平台接入完全一致:

  1. 输出契约:JSON 格式(ILogger 的 Console JSON、Serilog JsonFormatter、NLog JsonLayout、log4net JSON 扩展),写 stdout(容器)或滚动文件(主机)。
  2. DataKit 采集:stdout 自动采集或 logging.conf 文件采集,source: dotnet-appservice 区分服务,JSON 自动解析为字段。
  3. Pipeline 标准化:级别映射标准 status,时间戳解析为 time,trace_id 提取为顶层字段。
  4. 平台能力:日志查看器检索聚类、监控器告警(钉钉/企业微信/飞书)、多索引成本控制、APM trace_id 双向跳转——全部与框架选型解耦。

常见问题(FAQ)

ILogger 会不会取代 Serilog/NLog?

不会。ILogger 是抽象与最小实现,微软刻意保持精简;轮转、丰富输出端、高级过滤这些能力长期会留给社区。正确姿势是组合而非替代。

Serilog 和 NLog 性能差多少?

常规业务场景无感知差异。极限吞吐下两者都有异步方案(Async Sink / AsyncWrapper)。选型看 API 偏好与团队熟悉度,不看微基准。

可以同时用两个框架吗?

技术上可以(比如过渡期),但要统一输出格式与目的地,否则平台侧解析规则翻倍。过渡期建议尽早收敛到一个框架。

.NET Framework 老项目呢?

log4net/NLog 对 .NET Framework 支持最好;Serilog 也可用于 .NET Framework 4.6.1+。接入观测云的方式相同——文件采集 + Pipeline 解析。

系列阅读


获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台