在 C# 中实现日志写入 Loki 最常用的方式是结合 Serilog 日志框架和 Serilog.Sinks.Grafana.Loki 扩展包。这种方式支持结构化日志、自定义标签和灵活的配置,以下是完整的实现步骤:
一、准备工作
-
安装 NuGet 包
在项目中安装必要的依赖包(通过 NuGet 包管理器或命令行):# Serilog 核心包 Install-Package Serilog -Version 3.1.1 Install-Package Serilog.AspNetCore -Version 8.0.0 # 集成 ASP.NET Core # Loki 接收器(用于将日志发送到 Loki) Install-Package Serilog.Sinks.Grafana.Loki -Version 8.0.0 -
确保 Loki 服务可用
确认 Loki 已启动并可访问(默认地址:http://localhost:3100),可通过访问http://localhost:3100/ready验证,返回ready即表示正常运行。
二、配置 Serilog 连接 Loki
在 Program.cs 中配置 Serilog,设置 Loki 服务地址、日志标签、租户信息(可选)和日志格式:
using Serilog;
using Serilog.Sinks.Grafana.Loki;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
var builder = WebApplication.CreateBuilder(args);
// 1. 从配置文件读取 Loki 地址和租户 ID(建议通过 appsettings.json 配置)
var lokiUri = builder.Configuration["Loki:Uri"] ?? "http://localhost:3100";
var tenantId = builder.Configuration["Loki:TenantId"] ?? "default-tenant"; // 多租户标识
// 2. 配置 Serilog 日志系统
List<LokiLabel> labels = new List<LokiLabel>();
labels.Add(new LokiLabel {
Key = "App", Value = "testproject" });
// 1.获取应用程序名称和版本(用于 Elasticsearch 索引命名)
var appName = Assembly.GetExecutingAssembly().GetName().Name;
var appVersion = Assembly.GetExecutingAssembly(


1883

被折叠的 条评论
为什么被折叠?



