我创建了一个非常简单的控制台应用程序,它应该将消息记录到AWS Logs,但是虽然应用程序运行但我在AWS上找不到任何日志。 我认为发布应用程序代码没有意义:我认为它没问题并且它不会抛出任何异常。 我认为问题出在AWS设置中。这就是我在AWS中所做的:
创造了一些角色,不确定为什么,但它几乎接近糟糕和凌乱的文档所说的。因此,角色是创建的,不像“文档”中所假设的那样,但它包含日志所需的权限。为什么我创造它? - 我没有线索 - 我的应用程序不使用它!
创建了日志组 - 好吧,这个参数是我放入我的应用程序配置的
不确定我是否需要创建日志流,但是确定,我创建了它,但是当我点击它时它会显示“找不到任何事件”。并且“您似乎还没有安装CloudWatch Logs代理..” 为什么我需要一些代理?它是什么?如何安装? - 绝对不清楚并且指向糟糕的aws“文档”是没用的。
我想这些是在AWS中完成的主要事情但是......但是没有结果 - 没有任何效果,我看不到日志。
在google,youtube等搜索到答案 - 没有结果。 找到了一些类似于我的代码,但它没有用 - 似乎需要在AWS上完成一些设置。
怎么了?
答案 0 :(得分:0)
您有两个选择:
使用此选项,您无需在程序中配置与AWS相关的任何内容,而必须安装和配置代理。
使用此选项,您必须创建具有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(它只会创建日志流并将其留空),因此让程序运行完成以填充日志流本身