新闻中心

C#的日志记录(Logging)是什么?如何集成Serilog或NLog?

2025-11-11
浏览次数:
返回列表
答案:C#中常用Serilog和NLog实现日志记录,Serilog支持结构化日志和多种输出,适用于微服务;NLog配置灵活、性能高,适合企业应用,两者均通过ILogger接口集成。

c#的日志记录(logging)是什么?如何集成serilog或nlog?

日志记录(Logging)在C#开发中是用于跟踪应用程序运行状态、捕获错误信息和调试问题的重要手段。它帮助开发者了解程序执行流程,尤其是在生产环境中排查异常或性能瓶颈时非常关键。

.NET 提供了内置的 ILogger 接口和默认的日志提供程序(如 Console、Debug、EventLog 等),但第三方日志框架如 SerilogNLog 功能更强大,支持结构化日志、多种输出目标(文件、数据库、网络服务等)以及灵活的配置方式。

集成 Serilog

Serilog 以结构化日志著称,适合将日志写入 JSON 格式并对接 ELK、Seq 等分析平台。

1. 安装 NuGet 包
在项目中安装以下包:
  • Serilog.AspNetCore(用于 ASP.NET Core 集成)
  • Serilog.Sinks.Console(控制台输出)
  • Serilog.Sinks.File(文件输出)
可通过 Package Manager 或 CLI 执行:
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console  
dotnet add package Serilog.Sinks.File
2. 配置 Serilog
Program.cs 中配置:
using Serilog;

var builder = WebApplication.CreateBuilder(args);

// 配置 Serilog
builder.Host.UseSerilog((context, services, configuration) => configuration
    .WriteTo.Console()
    .WriteTo.File("logs/log-.txt", rollingInterval: RollingInterval.Day)
    .ReadFrom.Services(services)
    .Enrich.FromLogContext());

var app = builder.Build();

app.Run();
3. 使用 ILogger
在控制器或其他服务中注入 ILogger 即可使用:
public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        _logger.LogInformation("访问了首页");
        return View();
    }
}

集成 NLog

NLog 是一个高性能、易于配置的日志框架,支持大量目标和规则过滤。

千鹿Pr助手 千鹿Pr助手

智能Pr插件,融入众多AI功能和海量素材

千鹿Pr助手 128 查看详情 千鹿Pr助手 1. 安装 NuGet 包
安装以下包:
  • NLog.Extensions.Logging
  • NLog.Config(可通过模板生成 nlog.config)
命令示例:
dotnet add package NLog.Extensions.Logging
dotnet add package NLog.Config
2. 添加 nlog.config 配置文件
在项目根目录添加 nlog.config,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <targets>
    <target xsi:type="File" name="fileTarget" 
            fileName="logs/${shortdate}.log" 
            layout="${longdate} ${level} ${message} ${exception}" />
    <target xsi:type="Console" name="consoleTarget" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="fileTarget,consoleTarget" />
  </rules>
</nlog>
确保设置该文件的“复制到输出目录”为“始终复制”。 3. 在 Program.cs 中启用 NLog
using NLog;
using NLog.Web;

var builder = WebApplication.CreateBuilder(args);

// 添加 NLog
builder.Host.UseNLog();

var app = builder.Build();

app.Run();
4. 使用 ILogger
与 Serilog 一样,通过依赖注入使用标准 ILogger 接口写日志。

选择建议

Serilog 更适合需要结构化日志、集中式日志分析的场景,比如微服务架构中对接 Seq 或 Elasticsearch。

NLog 配置灵活、性能高,适合传统企业应用或对日志路由有复杂需求的项目。

两者都支持 .NET 的 Microsoft.Extensions.Logging 抽象层,因此可以无缝替换内置日志提供者。

基本上就这些。根据项目需求选一个,配置好后统一用 ILogger 写日志即可。

以上就是C#的日志记录(Logging)是什么?如何集成Serilog或NLog?的详细内容,更多请关注其它相关文章!


# 操作指南  # 网站优化最好的解决办法  # 永宁短视频营销软文推广  # 云南产品seo推广招聘  # 直播间seo排名系统  # 湖北私域营销推广  # 新品seo软文推广  # 萝岗网站建设优化  # 海口牛肉饼团购网站推广  # 武清监控器材网站建设  # 谷歌seo电话  # 如何在  # 序列化  # 是在  # 是一个  # js  # 如何将  # 如何使用  # 可通过  # 结构化  # .net  # c#开发  # 性能瓶颈  # c#  # 配置文件  # microsoft  # 路由  # app  # json 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: CSS图片焦点样式实现教程:理解与应用tabindex属性  Lar*el递归关系中排除子孙节点的策略  深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量  俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达  AO3最新镜像入口 Archive of Our Own官方平台访问  Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量  高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法  树莓派传感器触发:通过Twilio API发送WhatsApp消息教程  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问  Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程  QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】  2026春节假期票务安排_2026春节放假购票指南  如何使用Node.js csv 包按条件移除含空字段的CSV记录  J*aScript map 迭代中检测空数组元素的有效方法  三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  自定义Bag-of-Words实现:处理带负号的词汇权重  Lar*el 递归关系中排除指定分支的教程  J*aScript:在map操作中高效处理空数组  Python模块化编程:有效管理依赖与避免循环引用  Golang如何优雅处理error_Golang error处理最佳实践总结  windows10怎么查看本机ip_windows10命令提示符ipconfig使用  HTML空白字符处理机制:渲染、DOM与编码实践  Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略  Golang如何测试channel通信行为_Golang channel通信测试与分析方法  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  J*a应用程序首次运行自动创建文件与目录的最佳实践  汽水音乐在线版入口_汽水音乐网页播放手册  4399体育竞技小游戏_4399小游戏赛事入口  解决移动端滚动问题的overflow属性应用指南  qq游戏网页版直接玩_qq游戏免下载快速入口  Python:递归比较文件夹内容并找出特定类型文件的差异  Python自定义类排序:解决lambda键值访问TypeError的实践指南  sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程  葱吃多了会怎样 葱吃多了会伤胃吗  网易大神怎么保存别人动态的图片_网易大神动态图片保存方法  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题  jQuery Mask 插件中实现电话号码固定前导零的教程  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  Go语言HTML解析:利用Goquery精准获取指定元素内容  CSS实现侧边栏导航项全宽圆角悬停背景效果  学习通网页版官方登录 超星学习通电脑端入口指南  Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】 

搜索