如何调试或查看在Elastic Beanstalk中部署的.NET Core应用程序的输出?

Ang*_*ker 4 logging amazon-web-services amazon-elastic-beanstalk asp.net-core

具体来说,我感兴趣的是能够通过他们的界面看到输出.例如,无论如何获取ILogger.LogFoo方法或Console.WriteLine显示在" 监视"或" 日志"选项卡中或其他任何位置?

我正试图远离专有的AWS方式来查看输出,以防应用程序需要在其他地方部署.

在此输入图像描述

Mar*_*ery 12

没有办法让基于Windows的应用程序的日志显示在Elastic Beanstalk界面中.几个月前我特意请求AWS支持,并收到以下回复,告诉我使用CloudWatch:

你好,

beanstalk日志使用它自己的逻辑来收集日志.在它的Linux的verison,可以简单地将文件添加到记录的路径,但在Windows日志被单独收集,因为它们使用了不同类型的日志记录司机的收集日志,因此它不可能简单地将文件添加到路径并看到它们显示在beanstalk日志记录中.

你可以做什么,而不是使用内置的beanstalk日志记录,而是使用cloudformation [sic]日志.

http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html

有了这个,您应该能够设置一个记录器,允许您直接将日志发送到亚马逊云观察日志.

最好的祝福,

以利亚 亚马逊网络服务

谨慎的做法是,您希望避免将所有日志记录代码紧密耦合 - 正如您在问题中所说的那样 - "专有的AWS查看输出方式".但是,通过将ASP.NET Core框架的标准日志记录与将ASP.NET Core的内置记录器与CloudWatch集成的日志记录提供程序一起使用,可以将CloudWatch与松散耦合一起使用.AWS.Logger.AspNetCore

基于一目了然过犯,我添加了这个功能,我目前的公司的代码库,我想,为了得到它的工作,我不得不做如下修改,主要是在基于ASP.NET官方核心CloudWatch的集成例如HTTPS ://github.com/aws/aws-logging-dotnet/tree/master/samples/AspNetCore/WebSample:

  1. Install-Package AWS.Logger.Core
    Install-Package AWS.Logger.AspNetCore
    
    Run Code Online (Sandbox Code Playgroud)
  2. loggerFactory.AddAWSProvider(Configuration.GetAWSLoggingConfigSection());
    
    Run Code Online (Sandbox Code Playgroud)

    到我的应用程序

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    
    Run Code Online (Sandbox Code Playgroud)

    方法Startup.cs(模板应用程序包含调用loggerFactory.AddConsole(Configuration.GetSection("Logging"));和的相同位置)loggerFactory.AddDebug();.

  3. AWS.Logging在我的appsettings.config文件的根目录中添加一个部分:

    {
      "AWS.Logging": {
        "Region": "us-west-2",
        "LogGroup": "put-whatever-name-you-like-here",
        "LogLevel": {
          "Default": "Debug",
          "System": "Information",
          "Microsoft": "Information"
        }
      },
      ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 每在说明http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html#AWSHowTo.cloudwatchlogs.permissions,以创建一个自定义策略https://console.aws.amazon.com/iam/home#/具有以下内容的政策:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:GetLogEvents",
            "logs:PutLogEvents",
            "logs:DescribeLogGroups",
            "logs:DescribeLogStreams",
            "logs:PutRetentionPolicy"
          ],
          "Resource": [
            "arn:aws:logs:us-west-2:*:*"
          ]
        }
      ]
    }
    
    Run Code Online (Sandbox Code Playgroud)

    然后将其连接到了aws-elasticbeanstalk-ec2-rolehttps://console.aws.amazon.com/iam/home#/roles/aws-elasticbeanstalk-ec2-role.(请注意,us-west-2在JSON以上是具体到我的应用程序,因为这是它部署在该地区,这aws-elasticbeanstalk-ec2-role默认的弹性魔豆实例的角色-你可能需要将策略附加到不同的角色,如果你拉扯大具有不同角色的实例.)

完成所有操作后,您ILogger应该登录CloudWatch.如果你去https://console.aws.amazon.com/cloudwatch/home,点击"日志"在侧边栏,然后点击其名称的匹配的日志组LogGroup在你的设置appsettings文件,你应该能够看到你的日志.