У меня есть приложение .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:
И, наконец, я предоставил Lambda:соответствующий доступ к журналам CloudWatch:
Я не уверен, куда идти дальше.Как я уже говорил ранее, это прекрасно работает в среде dev (Debug).Он просто не работает с Lambda, и SelfLog не выдает ошибок.
У кого-нибудь есть предложения по решению этой проблемы?Я ценю помощь!