Я использую серилог для регистрации. У меня есть лямбда-функция 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));
}