Я выполняю вход в AWS в моем приложении .NET Core с использованием пакета NuGet AWS.Logging.AspNetCore.
Способ предоставления настраиваемого форматирования ваших сообщений, согласно документации,передать Func<LogLevel, object, Exception, string>
, который обеспечивает некоторый контроль над ним. Это нормально и работает, но я хочу настроить сообщение с некоторой идентификационной информацией, предоставляемой сервисом с определенными областями и варьирующейся от запроса к запросу.
Кто-нибудь знает способ достижения этого? Я мог бы просто пойти по этому пути неправильно, и мне пришлось бы написать собственную реализацию ILogger, которая взаимодействует с AWS SDK, однако это похоже на переизобретение колеса.
У меня есть (довольно) грязный метод, яс помощью, чтобы попытаться получить это и работает, что заключается в следующем. IAppIdentity - это объект, который будет содержать данные, связанные с идентификацией, и это null
здесь (как и ожидалось, но, надеюсь, демонстрирует, что я пытаюсь сделать. Это сервис с ограниченным доступом, поэтому это неправильное место, к которому нужно пытаться получить доступэто)
public static IServiceCollection AddExternalLogging(this IServiceCollection services, Action<LoggingConfiguration> setupAction)
{
services.Configure(setupAction);
ServiceProvider provider = services.BuildServiceProvider();
var config = provider.GetService<IOptions<LoggingConfiguration>>();
IAppIdentity identity = provider.GetService<IAppIdentity>(); // This is null, as expected
AWSLoggerConfig awsLoggerConfig = new AWSLoggerConfig();
awsLoggerConfig.Credentials = new BasicAWSCredentials(config.Value.AccessKey, config.Value.SecretKey);
awsLoggerConfig.LogGroup = config.Value.LogGroup;
awsLoggerConfig.Region = config.Value.Region;
services.AddLogging(logging => logging.AddAWSProvider(awsLoggerConfig, formatter: (logLevel, message, exception) => $"{logLevel}: {message}"));
return services;
}
Это вызывается при запуске с помощью
services.AddExternalLogging(options =>
{
// option values...
});
Кто-нибудь делал что-то подобное? Раньше мы использовали другого провайдера журналирования, который требовал пользовательской реализации ILogger/ILoggerProvider
, которая работала нормально, но я чувствую, что, вероятно, есть более простой способ сделать это с AWS, учитывая, что уже есть реализация ILogger
, доступная из коробки.
Спасибо