.NET Core 6构建主机时为现有日志添加AWS.Logging.NLog
AWS.Logging.NLog 配置方法
第一步:安装依赖包
- 从NuGet安装
AWS.Logger.NLog包,该包已内置NLog的AWS CloudWatch Logs输出目标,安装后无需手动编写目标注册代码。
第二步:修改配置文件
在现有appsettings.json的Logging:NLog配置节中,保留原有本地滚动文件日志的目标、路由规则,额外新增AWS日志目标和对应路由即可,参考配置如下:
{ "Logging": { "NLog": { "throwConfigExceptions": true, "targets": { // 原有本地滚动文件目标保留,无需修改 "local_file": { "type": "File", "fileName": "logs/service-${shortdate}.log", "layout": "${longdate}|${level:uppercase=true}|${logger}|${message}${exception:format=toString}", "archiveAboveSize": 10485760, "maxArchiveFiles": 30 }, // 新增AWS CloudWatch日志目标 "aws_cloudwatch": { "type": "AWSTarget", "logGroup": "your-service-log-group", // 替换为实际的日志组名称 "logStream": "${machinename}-${shortdate}", // 日志流名称建议带机器标识和日期,避免多实例冲突 "region": "cn-north-1", // 替换为实际使用的AWS区域 "layout": "${longdate}|${level:uppercase=true}|${logger}|${message}${exception:format=toString}" } }, "rules": [ // 原有本地文件日志路由规则保留 { "logger": "*", "minLevel": "Info", "writeTo": "local_file" }, // 新增路由规则,将符合级别的日志同步输出到AWS { "logger": "*", "minLevel": "Info", "writeTo": "aws_cloudwatch" } ] } } }
权限说明:
AWSTarget默认会按照AWS标准凭证链自动获取身份权限:本地调试时会读取本机~/.aws/credentials下的配置,部署到EC2/ECS/EKS等AWS环境时会自动读取绑定的实例/服务角色权限,无需硬编码密钥。只需保证对应身份拥有logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents三个CloudWatch Logs操作权限即可。
第三步:调整日志初始化代码
你现有的代码逻辑无需大幅改动,加载NLog配置时会自动识别配置中定义的AWSTarget,调整后的代码如下:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .UseSystemd() .ConfigureAppConfiguration((w, c) => { c.AddCustomJsonFile("app.config.json", optional: true, reloadOnChange: true); if (w.HostingEnvironment.EnvironmentName != Environments.Production) { c.AddCustomJsonFile($"app.config.{w.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true); } }).ConfigureLogging((hostContext, logBuilder) => { if (hostContext.Configuration.GetSection("Logging:NLog").Exists()) { var nlogConfig = new NLogLoggingConfiguration(hostContext.Configuration.GetSection("Logging:NLog")); logBuilder.AddNLog(nlogConfig).SetMinimumLevel(LogLevel.Information); } });
配置注意事项
- 开发环境如果不需要输出日志到AWS,直接在开发环境的配置覆盖文件中删除aws目标对应的路由规则,或者将该规则的
minLevel设为高于实际输出的日志级别即可,无需修改业务代码。 - 生产环境不建议在配置中硬编码AWS AccessKey/SecretKey,优先使用IAM角色做权限管控,避免密钥泄露。
- 如果需要调整AWS日志的批量发送间隔、队列大小,可以在
aws_cloudwatch目标节点中添加batchPushInterval、queueSize参数自定义。
内容的提问来源于stack exchange,提问作者LiteWait
相关产品推荐
相关产品推荐

