0

0

C# 怎么使用 Serilog 或 NLog 记录日志_C# 日志记录框架使用指南

小老鼠

小老鼠

发布时间:2025-11-04 15:14:02

|

525人浏览过

|

来源于php中文网

原创

Serilog和NLog是.NET中常用日志框架,Serilog支持结构化日志,配置简洁,适合集成Seq、Elasticsearch;NLog配置灵活,支持复杂规则,适用于企业级应用。两者均通过NuGet安装,配合配置文件或代码初始化,并通过ILogger接口写入日志,可根据项目需求选择其一。

c# 怎么使用 serilog 或 nlog 记录日志_c# 日志记录框架使用指南

在 C# 项目中使用 Serilog 或 NLog 进行日志记录,是现代 .NET 应用开发中的常见实践。它们比内置的 logging 更灵活、功能更强大。下面分别介绍如何在 ASP.NET Core 或普通 .NET 项目中集成和使用 Serilog 和 NLog。

使用 Serilog 记录日志

Serilog 是一个结构化日志库,支持将日志输出到控制台、文件、数据库、Elasticsearch、Seq 等多种目标。

1. 安装 NuGet 包
在项目中安装以下包(以写入文件和控制台为例):

Install-Package Serilog
Install-Package Serilog.Sinks.Console
Install-Package Serilog.Sinks.File

2. 配置 Serilog(在 Program.cs 中)
对于 .NET 6+ 的项目,在 Program.cs 中配置:

using Serilog;

var builder = WebApplication.CreateBuilder(args);

// 配置 Serilog
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day)
    .CreateLogger();

// 使用 Serilog 作为日志提供者
builder.Host.UseSerilog();

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

3. 在代码中使用 ILogger
注入 ILogger<T> 并记录日志:

public class HomeController
{
    private readonly ILogger<HomeController> _logger;

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

    public void Index()
    {
        _logger.LogInformation("用户访问了首页");
        _logger.LogWarning("这是一个警告");
        _logger.LogError("发生了一个错误");
    }
}

4. 结构化日志示例
Serilog 支持结构化日志,可带参数:

_logger.LogInformation("用户 {UserId} 在 {LoginTime} 登录", 123, DateTime.Now);

使用 NLog 记录日志

NLog 是另一个流行的日志框架,配置灵活,支持多种目标和规则。

1. 安装 NuGet 包

ModelGate
ModelGate

一站式AI模型管理与调用工具

下载
Install-Package NLog
Install-Package NLog.Web.AspNetCore

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"
      autoReload="true"
      internalLogLevel="Info"
      internalLogFile="logs/internal-nlog.txt">

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

  <rules>
    <logger name="*" minlevel="Trace" writeTo="fileTarget,consoleTarget" />
  </rules>
</nlog>

3. 在 Program.cs 中启用 NLog

using NLog.Web;

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

app.MapGet("/", () => "Hello NLog!");

app.Run();

4. 使用 ILogger 写日志
与 Serilog 相同,通过依赖注入使用:

_logger.LogInformation("请求处理完成,响应状态:{StatusCode}", 200);

两种框架的对比与选择

  • Serilog:更适合需要结构化日志、集成 Seq、Elasticsearch 等分析工具的场景。API 简洁,链式配置清晰。
  • NLog:配置强大,支持复杂的路由规则、过滤器、条件写入。适合传统企业级应用或需要精细控制日志行为的项目。
  • 两者都支持 .NET Core/.NET 5+,都能与 ASP.NET Core 深度集成。

提示:如果你追求简洁和现代结构化日志,推荐 Serilog;如果已有 NLog 配置经验或需要复杂日志策略,NLog 是可靠选择。

基本上就这些。根据项目需求选择其一,配置好后就能统一管理日志输出了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1954

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

658

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2401

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

47

2026.01.19

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

389

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2111

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

357

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

259

2023.09.05

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.3万人学习

C 教程
C 教程

共75课时 | 5.4万人学习

C++教程
C++教程

共115课时 | 21.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号