Регистратор Serilog не ведет журнал, когда метод вызывается из лямбда-функции - PullRequest
1 голос
/ 14 июля 2020

Я использую серилог для регистрации. У меня есть лямбда-функция AWS в проекте, который записывает данные в группу lambda_logs cloudwatch. У меня также есть метод oflline_method() в другом проекте, который по умолчанию записывает данные в группу облачных наблюдателей offline_logs. Метод oflline_method() в некотором сценарии вызывается лямбдой изнутри. В этом случае все журналы, относящиеся к лямбде, необходимо регистрировать в группе lambda_logs, а журналы, относящиеся к offline_method, необходимо регистрировать в offline_logs. Но журналы, записанные из offline_method, не регистрируются в группе cloudwatch только тогда, когда она вызывается лямбда.

namespace Online
{
    public class lambda
    {
        public async Task<KinesisFirehoseResponse> MethodA(ILambdaContext context)
        {
            //this will be logged into lambda_logs
            context.Logger.LogLine("Logged by the method MethodA in lambda");

            var firehoseResponse = new KinesisFirehoseResponse();

            //Calls the oflline_method from offline project 
            var a = oflline_method();

            return firehoseResponse;
        }
    }
}


namespace OfflineProject
{
    public class Offline
    {
        private readonly ILogger<Offline> _logger;

        public Offline()
        {
            _logger = new SerilogLoggerFactory().CreateLogger<Offline>();
        }

        public string oflline_method()
        {
            //this should be logged into offline_logs, but it is not happening only when called by lambda
            _logger.LogInformation(" Logged by the method oflline_method in offline");

            return "from offline";

        }
    }
}

Внедрение зависимостей используется для создания объекта регистратора. Ниже конфиги в Startup.cs

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    var options = new CloudWatchSinkOptions
    {
        LogGroupName = "offline_logs",
        TextFormatter = new LogFormatter(),
        MinimumLogEventLevel = LogEventLevel.Verbose,
        BatchSizeLimit = 100,
        QueueSizeLimit = 10000,
        Period = TimeSpan.FromSeconds(10),
        CreateLogGroup = true,
        LogStreamNameProvider = new AwsCloudWatchLogStream(),
        RetryAttempts = 5
    };

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.ControlledBy(new EnvironmentVariableLoggingLevelSwitch(DebugMode))
        .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
        .MinimumLevel.Override("System", LogEventLevel.Warning)
        .WriteTo.AmazonCloudWatch(options, new AmazonCloudWatchLogsClient())
        .CreateLogger();
}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true));
}
...