使用AWS .NET Core日志记录时更改消息

时间:2019-12-11 13:46:01

标签: amazon-web-services .net-core amazon-cloudwatch

我正在使用AWS.Logging.AspNetCore NuGet程序包将AWS登录到.NET Core应用程序中。

根据文档,为消息提供自定义格式的方法是传入Func<LogLevel, object, Exception, string>,从而对其进行控制。很好,可以用,但是我想用范围服务提供的一些身份信息来自定义消息,该消息随请求而异。

有人知道实现这一目标的方法吗?我可能只是走错路了,不得不编写自己的ILogger实现并与AWS开发工具包交互,但这就像重新发明轮子一样。

我有一个(相当)肮脏的方法,用于尝试使它启动并运行,如下所示。 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实现可用。

谢谢

0 个答案:

没有答案
相关问题