Serilog CloudWatchSink не работает из лямбда-функции - PullRequest
0 голосов
/ 25 октября 2018

У меня есть приложение .NET Core 2 WebAPI, работающее в AWS Lambda.Я использую раковину Serilog AwsCloudWatch.Я также реализовал промежуточное программное обеспечение из примера Datalust SerilogMiddleware .

Все это отлично работает в моей среде разработки (журналы записываются в правильную группу журналов CloudWatch).Однако, когда приложение работает в Lambda, регистрация не происходит.Я включил Serilog SelfLog, однако в нем нет зарегистрированных ошибок, поэтому я не верю, что это проблема с учетными данными AWS.

Это моя конфигурация регистрации:

private Serilog.Core.Logger ConfigureLogger(IHostingEnvironment env)
{
    Serilog.Debugging.SelfLog.Enable(Console.Error);

    // Base configuration
    var logger = new LoggerConfiguration()
        .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
        .MinimumLevel.Override("System", LogEventLevel.Warning)
        .Enrich.FromLogContext()
        .Enrich.WithMachineName()
        .Enrich.WithThreadId();

    // Configure Sink: AWS CloudWatch
    var cloudWatchLogsClient = new AmazonCloudWatchLogsClient("ACCESS_KEY_ID", "SECRET_ACCESS_KEY",                                                                   RegionEndpoint.GetBySystemName(awsConfig.CloudWatchRegion));
    var logLevel = env.IsProduction() ? LogEventLevel.Information : LogEventLevel.Debug;
    logger.WriteTo.AmazonCloudWatch(new CloudWatchLogSinkOptions(env, logLevel), cloudWatchLogsClient);

    // Configure Sink: Console (only for Debug environment)
    if (env.IsDebug())
    {
        logger.WriteTo.Console(LogEventLevel.Debug);
    }

    return logger.CreateLogger();
}

Это реализацияCloudWatchSinkOptions:

   public class CloudWatchLogSinkOptions : ICloudWatchSinkOptions
    {
        public CloudWatchLogSinkOptions(IHostingEnvironment env, LogEventLevel level = LogEventLevel.Information)
        {
            LogGroupName += env.EnvironmentName;
            MinimumLogEventLevel = level;
        }

        #region Settings

        public LogEventLevel MinimumLogEventLevel { get; set; }
        public int BatchSizeLimit { get; set; } = 100;
        public TimeSpan Period { get; set; } = TimeSpan.FromSeconds(10);
        public LogGroupRetentionPolicy LogGroupRetentionPolicy { get; set; } = LogGroupRetentionPolicy.OneYear;
        public bool CreateLogGroup { get; set; } = true;
        public string LogGroupName { get; set; } = "WebApi-ApplicationLog/";
        public ILogStreamNameProvider LogStreamNameProvider { get; set; } = new DefaultLogStreamProvider();
        public ITextFormatter TextFormatter { get; set; }= new SerilogTextFormatter();
        public byte RetryAttempts { get; set; } = 5;
        public int QueueSizeLimit { get; set; }

        #endregion


        #region Defaults

        public const LogEventLevel DefaultMinimumLogEventLevel = LogEventLevel.Information;
        public const int DefaultBatchSizeLimit = 100;
        public const bool DefaultCreateLogGroup = true;
        public const byte DefaultRetryAttempts = 5;
        public static readonly TimeSpan DefaultPeriod = TimeSpan.FromSeconds(10);

        #endregion

    }

Я считаю, что я включил все необходимые пакеты Serilog:

enter image description here

И, наконец, я предоставил Lambda:соответствующий доступ к журналам CloudWatch:

enter image description here

Я не уверен, куда идти дальше.Как я уже говорил ранее, это прекрасно работает в среде dev (Debug).Он просто не работает с Lambda, и SelfLog не выдает ошибок.

У кого-нибудь есть предложения по решению этой проблемы?Я ценю помощь!

...