.Net Core 5.0 如何使用Serilog配置日志输出到AWS Cloudwatch
实现步骤
第一步:安装必要NuGet包
你需要先安装两个依赖包:
Serilog.Sinks.AwsCloudWatch:Serilog对接AWS CloudWatch的核心Sink组件AWSSDK.CloudWatchLogs:AWS CloudWatch日志服务的官方SDK
你可以通过NuGet包管理器搜索安装,也可以直接使用dotnet CLI命令安装:dotnet add package Serilog.Sinks.AwsCloudWatchdotnet add package AWSSDK.CloudWatchLogs
第二步:修改appsettings配置
直接在你现有Serilog节点的WriteTo配置段中新增CloudWatch的配置项即可,完整配置参考如下:
{ "Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.AwsCloudWatch" ], "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Warning", "System": "Warning" } }, "WriteTo": [ // 你原有的控制台输出配置 { "Name": "Console" }, // 你原有的文件输出配置 { "Name": "File", "Args": { "path": "logs/log-.txt", "rollingInterval": "Day" } }, // 新增的CloudWatch输出配置 { "Name": "AwsCloudWatch", "Args": { "logGroupName": "你的CloudWatch日志组名称", "logStreamNamePrefix": "日志流前缀,可填项目环境标识,比如dev-api-", "region": "AWS区域编码,比如cn-north-1(北京区)、us-east-1(美东1区)", "accessKey": "你的AWS Access Key", "secretKey": "你的AWS Secret Key", "minimumLogEventLevel": "Information", "batchSizeLimit": 100, "queueSizeLimit": 10000, "period": "00:00:02" } } ] } }
注意:生产环境不建议在配置文件中明文存储AWS密钥,如果你将服务部署在AWS EC2、ECS、Lambda等官方服务上,直接给对应实例绑定拥有CloudWatch日志写入权限的IAM角色即可,不需要配置accessKey和secretKey参数。
第三步:确认配置加载逻辑
确保你的Program.cs中Serilog初始化逻辑是从配置文件读取配置的,参考代码如下:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSerilog((context, config) => { config.ReadFrom.Configuration(context.Configuration); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
只要你之前的文件、控制台日志输出正常,添加上述配置后日志就会自动同步写入CloudWatch。
常见问题排查
- 日志未上报时,先检查AWS账号对应的密钥/角色是否拥有
logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents三个权限 - 确认配置中的区域和你AWS账户CloudWatch所在区域完全一致
- 可临时将最低日志级别调整为Debug,查看Serilog自身的报错信息定位问题
内容的提问来源于stack exchange,提问作者Dibyo Chatterjee
相关产品推荐
相关产品推荐

