繁体   English   中英

如何使用 Serilog 将库日志记录到 AWS CloudWatch?

[英]How to log library logs to AWS CloudWatch using Serilog?

目前,我正在研究 ASP.NET 6 Web API 并作为记录器,我们使用 Serilog 将所有必要的详细信息记录到 cloudwatch,它工作正常。 现在我需要将诸如 AWS 错误之类的库日志添加到 cloudwatch。 目前在配置文件中有一个选项,但它只将日志保存为文件,导致设备上没有剩余空间:'/app/Logs/serilog-aws-errors.txt'并且文件中的详细信息没有出现在 cloudwatch 日志中。

这是我使用的 appsettings 数据,

"Serilog": {
"Using": [ "AWS.Logger.SeriLog", "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimumLevel": "Debug",
"WriteTo": [
  { "Name": "AWSSeriLog" },
  { "Name": "Console" },
  {
    "Name": "File",
    "Args": {
      "path": "Logs/webapi-.txt",
      "rollingInterval": "Day"
    }
  }
],
"Region": "eu-west-2",
"LogGroup": "/development/serilog",
"LibraryLogFileName": "Logs/serilog-aws-errors.txt"
}

我需要知道有一种方法可以将 serilog-aws-errors.txt 中的详细信息记录到 AWS cloudwatch 或 S3 存储桶。

这在很大程度上取决于您尝试在 AWS 中部署服务的位置。 在 ECS 或 Fargate 中,您可以直接登录到控制台。 这将是容器定义的一个片段:

    "containerDefinitions": [
      {
        "logConfiguration": {
          "logDriver": "awslogs",
          "options": {
            "awslogs-group": "/dev/ecs/my-api-logs-here",
            "awslogs-region": "us-east-1",
            "awslogs-stream-prefix": "ecs"
          }
        },

使用上面的配置,您只需要Serilog.Sinks.Console并且所有内容都将在没有特殊 AWS 接收器的情况下记录。 要写入控制台,您可以使用

                loggerConfiguration.WriteTo.Async(a =>
                {
                    a.Console(new JsonFormatter());
                });

当部署到 Fargate 或 ECS 时,这些控制台日志将出现在您的 CloudWatch 日志中。 不需要额外的水槽。 Lambda 日志具有类似的设置。 有关更多详细信息,请参阅: https://docs.aws.amazon.com/lambda/latest/dg/csharp-logging.html

如果您想使用Serilog.Sinks.AwsCloudWatch ,它确实有一些不错的功能,但设置略有不同。 您可能根本不想登录到控制台或文件接收器。 相反,您只需直接登录到 CloudWatch。 您需要根据 Github 上的说明进行设置: https://github.com/Cimpress-MCP/serilog-sinks-awscloudwatch 您可以在本地环境中启动并运行它,然后以仅在部署到 AWS 时运行的方式设置您的应用程序设置,并且在本地您仍然使用控制台或文件设置。

  var options = new CloudWatchSinkOptions
  {
    // the name of the CloudWatch Log group for logging
    LogGroupName = logGroupName,

    // the main formatter of the log event
    TextFormatter = formatter,
    
    // other defaults defaults
    MinimumLogEventLevel = LogEventLevel.Information,
    BatchSizeLimit = 100,
    QueueSizeLimit = 10000,
    Period = TimeSpan.FromSeconds(10),
    CreateLogGroup = true,
    LogStreamNameProvider = new DefaultLogStreamProvider(),
    RetryAttempts = 5
  };

  // setup AWS CloudWatch client
  var client = new AmazonCloudWatchLogsClient(myAwsRegion);

  // Attach the sink to the logger configuration
  Log.Logger = new LoggerConfiguration()
    .WriteTo.AmazonCloudWatch(options, client)
    .CreateLogger();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM