You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:27:27