我正在使用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
实现可用。
谢谢