c# - 没有构造函数 DI 的自定义日志记录
问题描述
我如何根据在每个类中没有构造函数依赖注入而注册的提供程序来记录自定义信息/错误?(因为我在控制器内部调用了单个控制器多个存储库,并且我无法更改存储库 i,e 类构造函数)
例如,我想在不接触控制器构造器的情况下在以下上下文中记录信息
public override void OnException(ExceptionContext context)
{
base.OnException(context);
var logger = Dependency.Resolve<ILogger>();
**//var logger = getIloggerSomehow from startup regsistred loggers**
logger.LogInformation("Custom Info");
}
我的启动服务如下所示,它在我期望的任何地方写入 dotnet 和 Microosft 日志。我如何在所有这些地方编写自定义日志?
services.AddLogging(loggingBuilder =>
{
loggingBuilder.AddConfiguration(Configuration.GetSection("Logging")); loggingBuilder.AddAWSProvider(Configuration.GetAWSLoggingConfigSection());
loggingBuilder.SetMinimumLevel(LogLevel.Debug);
loggingBuilder.AddConsole();
loggingBuilder.AddDebug();
});
解决方案
context
您可以从方法中解析服务OnException
:
using Microsoft.Extensions.DependencyInjection;
...
var service = context.HttpContext.RequestServices.GetService<ILogger<YourFilter>>();
推荐阅读
- shell - awk 多个字段中的多个字符串
- vba - VBA 将交替列复制到相邻列
- python - 当 groupby 另一个时,pandas 在组中至少获得一列
- angular - FAB 在 Ionic 和事件中的选项卡栏上
- tensorflow - tf.train.batch 中的错误 - FIFOQueue 已关闭且元素不足
- javascript - 在谷歌地图上放一些不同颜色的点
- ruby-on-rails - 单页多语言 - Ruby on Rails
- javascript - 如何导出用于在 ES6 中导入的函数?
- lua - 按降序排列 Lua 表(从高到低)
- python - SQLAlchemy/Python:将表传输到 MySQL 数据库时,使用列表元素作为表名