在 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></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 包
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 是可靠选择。
基本上就这些。根据项目需求选择其一,配置好后就能统一管理日志输出了。
