Microsoft.Extensions.Logging.RabbitMQ 1.1.3
Microsoft.Extensions.Logging.RabbitMQ
将 .NET 日志无缝集成到 RabbitMQ,实现日志的异步收集与分发。支持客户端日志推送与服务端日志消费,适用于分布式系统、微服务架构下的日志集中管理。
功能简介
- 日志异步推送:将应用日志实时推送到 RabbitMQ 队列。
- 服务端消费:通过实现接口,灵活处理和存储日志消息。
- 高度可配置:支持 RabbitMQ 连接参数、路由、虚拟主机等多项配置。
- 与 Microsoft.Extensions.Logging 完美集成:兼容 .NET 8,支持依赖注入与配置中心。
- 自动重连机制:RabbitMQ 连接异常自动恢复,保障日志不中断。
安装方法
通过 NuGet 安装:
dotnet add package Microsoft.Extensions.Logging.RabbitMQ
快速开始
1. 客户端:日志推送
在 Program.cs 或 Startup.cs 中配置:
using Microsoft.Extensions.Logging;
builder.Services.AddLogging(option => {
option.AddRabbitMQ(configure => {
configure.HostName = "localhost";
configure.Port = 5672;
configure.UserName = "guest";
configure.Password = "guest";
configure.RouteKey = "logs";
configure.Application = "Logging.RabbitMQ";
configure.VirtualHost = "/";
configure.AutomaticRecoveryEnabled = true;
});
});
//如果项目中已经其他rabbitmq的配置,可以用以下方式添加
option.AddRabbitMQ(serverProvider => serverProvider.GetRequiredService<IConnectionFactory>(),routeKey:"Logging.RabbitMQ");
日志将自动推送到 RabbitMQ 指定队列。
2. 服务端:日志消费与处理
实现 IRabbitMQMessageHandler 接口,处理日志消息:
using Microsoft.Extensions.Logging.RabbitMQ.Handler;
public class MyLogHandler : IRabbitMQMessageHandler
{
public Task HandleAsync(RabbitMQLoggerMessage message,CancellationToken cancellationToken = default)
{
// 处理日志消息,如写入数据库或文件
// 消息序列化为
Console.WriteLine($"收到日志: {message}");
return Task.CompletedTask;
}
}
注册服务端日志处理:
builder.Services.AddLogging(option => {
option.AddRabbitMQ<MyLogHandler>(configure => {
configure.HostName = "localhost";
configure.Port = 5672;
configure.UserName = "guest";
configure.Password = "guest";
configure.RouteKey = "logs";
configure.Application = "Logging.RabbitMQ";
configure.VirtualHost = "/";
configure.AutomaticRecoveryEnabled = true;
});
//如果项目中已经其他rabbitmq的配置,可以用以下方式添加
option.AddRabbitMQ<RabbitMQMessageHandler>(serverProvider => serverProvider.GetRequiredService<IConnectionFactory>(), routeKey: "Logging.RabbitMQ");
});
主要优势
- 解耦日志生产与消费:日志异步推送,消费端可独立扩展,支持多种存储方式。
- 高可用性:自动重连机制,保障日志链路稳定。
- 灵活扩展:只需实现接口即可自定义日志处理逻辑。
- 配置简单:与 .NET 原生日志体系无缝集成,支持依赖注入。
- 适用场景广泛:适合微服务、分布式系统、云原生应用等。
配置参数说明
| 参数 | 说明 | 示例值 |
|---|---|---|
| HostName | RabbitMQ 主机地址 | localhost |
| Port | RabbitMQ 端口 | 5672 |
| UserName | 用户名 | guest |
| Password | 密码 | guest |
| RouteKey | 路由键/队列名 | logs |
| Application | 应用标识 | Logging.RabbitMQ |
| VirtualHost | 虚拟主机 | / |
| AutomaticRecoveryEnabled | 自动重连 | true |
许可证
版权所有 © netor.me
本项目遵循 MIT 协议。
联系方式
- 官网:netor.me
- 邮箱:support@netor.me
No packages depend on Microsoft.Extensions.Logging.RabbitMQ.
添加连接工厂,使用servicekey 和系统其他消息队列分割开,默认:Logging.Rabbit
修复背景连接没有使用servicekey的错误
.NET 8.0
- Microsoft.Extensions.Configuration (>= 9.0.6)
- Microsoft.Extensions.Hosting.Abstractions (>= 9.0.6)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.6)
- Microsoft.Extensions.Logging.Configuration (>= 9.0.6)
- Netor.Extensions.JsonExtensions (>= 1.0.1)
- Netor.Extensions.StringExtensions (>= 6.1.1)
- RabbitMQ.Client (>= 7.1.0)