Изменение сообщений при использовании AWS .NET Core Logging - PullRequest
0 голосов
/ 11 декабря 2019

Я выполняю вход в 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, доступная из коробки.

Спасибо

...