首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Serilog将库日志记录到AWS CloudWatch?

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

Stack Overflow用户
提问于 2022-08-15 12:04:22
回答 1查看 245关注 0票数 1

目前,我正在编写ASP.NET 6 Web,作为一个记录器,我们使用Serilog记录所有必要的云监视细节,并且它运行良好。现在,我需要将诸如AWS错误之类的库日志添加到cloudwatch中。目前在配置文件中有一个选项,但它只将日志保存为一个文件,这将导致设备上留下的空间为:和文件中的详细信息没有出现在cloudwatch日志上。

这是我使用的应用程序数据,

代码语言:javascript
运行
复制
"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中将细节记录到或S3桶中。

EN

回答 1

Stack Overflow用户

发布于 2022-08-15 16:33:43

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

代码语言:javascript
运行
复制
    "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接收器的情况下进行日志记录。若要写入控制台,只需使用

代码语言:javascript
运行
复制
                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时才能运行,并且在本地仍然使用控制台或文件设置。

代码语言:javascript
运行
复制
  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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73360769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档