AWS Logging无效

时间:2018-02-13 08:34:00

标签: c# amazon-web-services logging

我创建了一个非常简单的控制台应用程序,它应该将消息记录到AWS Logs,但是虽然应用程序运行但我在AWS上找不到任何日志。 我认为发布应用程序代码没有意义:我认为它没问题并且它不会抛出任何异常。 我认为问题出在AWS设置中。这就是我在AWS中所做的:

  • 创造了一些角色,不确定为什么,但它几乎接近糟糕和凌乱的文档所说的。因此,角色是创建的,不像“文档”中所假设的那样,但它包含日志所需的权限。为什么我创造它? - 我没有线索 - 我的应用程序不使用它!

  • 创建了日志组 - 好吧,这个参数是我放入我的应用程序配置的

  • 不确定我是否需要创建日志流,但是确定,我创建了它,但是当我点击它时它会显示“找不到任何事件”。并且“您似乎还没有安装CloudWatch Logs代理..” 为什么我需要一些代理?它是什么?如何安装? - 绝对不清楚并且指向糟糕的aws“文档”是没用的。

我想这些是在AWS中完成的主要事情但是......但是没有结果 - 没有任何效果,我看不到日志。

在google,youtube等搜索到答案 - 没有结果。 找到了一些类似于我的代码,但它没有用 - 似乎需要在AWS上完成一些设置。

怎么了?

2 个答案:

答案 0 :(得分:0)

您有两个选择:

  1. 将日志文件写入磁盘,然后使用CloudWatch Agent将这些日志提交到CloudWatch:https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/QuickStartWindows2016.html

使用此选项,您无需在程序中配置与AWS相关的任何内容,而必须安装和配置代理。

  1. 使用AWS.Logger NuGet软件包并将其配置为将日志发送到CloudWatch,在这种情况下,您无需使用代理:https://github.com/aws/aws-logging-dotnet/tree/master/samples/AspNetCore

使用此选项,您必须创建具有CloudWatch Log写入权限的AWS API用户,并将此用户凭证放入AWS.Logger配置中。如果需要建议,请显示您使用的配置代码。

答案 1 :(得分:0)

我有一个类似的问题,事实证明它与配置有关。

首先,确保您已经安装了适用于Visual Studio的AWS Toolkit并使用适当的用户进行设置。我使用具有正确策略权限的IAM用户来读取和写入Cloudwatch日志。

这是我正常运行的基本控制台测试的副本:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;


namespace Runner
{
    class Program
    {
        public static async Task Main(string[] args)
        {
            var services = ConfigureServices(new ServiceCollection())
                .BuildServiceProvider();
            await services.GetService<App>().RunAsync();
        }

        private static IServiceCollection ConfigureServices(IServiceCollection services)
        {
            var configuration = ConfigurationFactory.GetConfiguration();

            services
                .AddSingleton(configuration)
                .AddLogging(builder =>
                {
                    var config = configuration.GetSection("Logging");
                    builder
                        .AddConfiguration(configuration.GetSection("Logging"))
                        .AddConsole()
                        .AddDebug()
                        .AddAWSProvider(configuration.GetAWSLoggingConfigSection().Config);
                })

            // add app
            services.AddTransient<App>();

            return services;
        }
    }

    public class App
    {
        private ILogger<App> Logger;

        public App(ILogger<App> logger)
        {
            Logger = logger;
        }

        public async Task RunAsync()
        {
            try
            {
                Logger.LogTrace("LogTrace", "{\"Test\":1}");
                Logger.LogInformation("LogInformation", "{\"Test\":2}");
                Logger.LogWarning("LogWarning", "{\"Test\":3}");
                Logger.LogDebug("LogDebug", "{\"Test\":4}");
                Logger.LogError("LogError", "{\"Test\":5}");
                Logger.LogCritical("LogCritical", "{\"Test\":6}");
                Thread.Sleep(3000);
                Debugger.Break();
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }
}

我的appsettings.json文件是:

{
  "Logging": {
    "Region": "eu-west-1",
    "LogGroup": "/dev/runner",
    "IncludeLogLevel": true,
    "IncludeCategory": true,
    "IncludeNewline": true,
    "IncludeException": true,
    "IncludeEventId": false,
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },
    "Console": {
      "LogLevel": {
        "Default": "Error",
        "System": "Information",
        "Microsoft": "Information"
      }
    },
    "Debug": {
      "LogLevel": {
        "Default": "Trace",
        "System": "Information",
        "Microsoft": "Information"
      }
    }
  }
}

Thread.Sleep允许控制台记录器跟上自己的步伐-如果您只是摔断,您通常看不到任何东西。

类似地,如果您退出在断点处执行的程序,AWS记录器将不会将其缓冲区刷新到Cloudwatch(它只会创建日志流并将其留空),因此让程序运行完成以填充日志流本身