.Net Code asp.net Lambda: дубликаты журналов облачных часов AWS, один не отформатированный - PullRequest
0 голосов
/ 10 февраля 2019

Это происходит с приложением .Net Core ASP.Net Lambda с использованием Microsoft.Extensions.Logging и AWS.Logger.AspNetCore.После (повторного) развертывания / публикации лямбды в журнале CW отображается начальный вызов (с использованием Postman) 2.Например:

2019/02/10T01.29.56 - 7f017ed5-857d-41af-8a6d-624ddc2be024
2019/02/10/[$LATEST]24ab4b53f17d4be3a2507331e968bbf7

Первый содержит около десятка записей, как внутренних сообщений Microsoft MVC, так и моих явных вызовов в журнале.Например:

[2/10/19 1:29:58 AM] Debug: Incoming POST requests to /api/carrierprogram/LaunchSendOffer/57e30620-571b-4b68-a86b-2ef4cb53f1a8/28
[2/10/19 1:29:58 AM] Debug: ASP.NET  Core Request PathBase: /Stage, Path: /api/carrierprogram/LaunchSendOffer/57e30620-571b-4b68-a86b-2ef4cb53f1a8/28

Второй журнал имеет немного другое содержимое, и сообщения не отформатированы:

[40m[32minfo[39m[22m[49m: Controllers.CarrierProgramController[0]
LaunchSendOffer(0) for programId '57e30620-571b-4b68-a86b-2ef4cb53f1a8', offerId '28'

Второй запрос, отправленный в Lambda, успешно возвращается, но тот же явныйЖурналы вызовов, записанные при первом вызове, вообще не отображаются в первом журнале.

Вот фрагмент из файла Startup.cs, который заполняет репозиторий служб DI

public void ConfigureServices(IServiceCollection services)
    {
    ...
        var awsConfig = Log.CompleteAwsConfiguration(Configuration.GetAWSLoggingConfigSection());
        var loggerFactory = new LoggerFactory()
            .AddAWSProvider(awsConfig,
                formatter: (logLevel, message, exception) => $"[{DateTime.UtcNow}] {logLevel}: {message}")
            .AddConsole()
            .AddDebug();
        services.AddSingleton(loggerFactory);
    ...

    }

И как регистраторупоминается в классе контроллера

private static ILogger<CarrierProgramController> _log;

    public CarrierProgramController(..., ILogger<CarrierProgramController> logger)
    {
        _log = logger;
    }

и в примере вызова:

_log.LogInformation($"LaunchSendOffer(0) for programId '{programId}', offerId '{offerId}'");

Я подозреваю, что это связано с тем, как кодируется приложение (DI C #), но это в основномчерный ящик, и это трудно устранить.Мои вопросы

Почему там генерируется 2 журнала?Почему записи во втором журнале не отформатированы (без префикса уровня журнала)?Почему последующие звонки в Lambda не добавляют в журнал (ы)?

1 Ответ

0 голосов
/ 15 февраля 2019

Я заменил ссылку на AWS.Logger.AspNetCore на Amazon.Lambda.Logging.AspNetCore.Этот пост пролил некоторый свет на поведение: https://github.com/aws/aws-logging-dotnet/issues/52

После замены пакета произошли некоторые дополнительные изменения.Я удалил раздел в методе «Конфигурация» в приведенном выше фрагменте из 7 строк.А в методе Configure () в Startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

Добавлена ​​эта строка:

loggerFactory.AddLambdaLogger(Configuration.GetLambdaLoggerOptions());

Все остальные изменения, например, конструкторы в контроллере и классах обслуживания были одинаковыми,Это значит, что мне не нужно было добавлять регистратор / фабрику обратно в коллекцию сервисов для DI.

Итак, чтобы ответить на мои 3 вопроса - кажется, все они связаны с использованием неправильного пакета и переходом на Amazon.Lambda.Logging.AspNetCore вернулся к ожидаемому поведению.

...