c# - 如何将 Serilog 附加到 dotnetcore 日志框架并将日志服务作为开放通用类型注入
问题描述
我正在尝试将 Serilog 附加到控制台应用程序中的 Dotnet 核心日志记录框架。就配置而言,一切都很好。但是,我无法以某种方式使依赖注入起作用。
对于我正在遵循的这种日志记录方法,需要记录的每个类都必须使用 ILogger 字段。我遇到的问题是如何将 ILogger 服务注册为开放通用类型(所以我可以传递任何 ILogger<>)。当我运行我当前的代码时,我得到了这个异常:
开放通用服务类型“Microsoft.Extensions.Logging.ILogger`1[TCategoryName]”需要注册开放通用实现类型。(参数“描述符”)
我已经查看了这里的线程,但似乎我的问题有点不同。
这是我的代码:
“测试”是一个需要记录功能的类:
public class Test
{
private readonly ILogger _logger;
public Test(ILogger<Test> logger)
{
_logger = logger;
}
public void DoSomething()
{
//code here
_logger.LogInformation("This is the logged error");
}
}
在主要我有类似的东西:
var log = serviceProvider.GetService<ILogger<Test>>();
new Test(log).DoSomething();
这就是我配置 ILogger 服务的方式:
public static IServiceCollection ConfigureSerilog(this IServiceCollection services)
{
var logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Warning)
.WriteTo.Console(restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information)
.WriteTo.File(@"Logs\orgManager.log", rollingInterval: RollingInterval.Day)
.WriteTo.Sink(new TelegramSink(), LogEventLevel.Error)
.CreateLogger();
ApplicationLogging.LoggerFactory.AddSerilog(logger);
services.AddSingleton(typeof(ILogger<>), s => ApplicationLogging.CreateLogger(typeof(ILogger<>)));
return services;
}
这是 ApplocationLogging 类(可在整个应用程序中访问):
public static class ApplicationLogging
{
public static ILoggerFactory LoggerFactory { get; } = new LoggerFactory();
public static ILogger CreateLogger(Type t)
{
return LoggerFactory.CreateLogger(t);
}
}
解决方案
推荐阅读
- c - 在 Mac Mojave 上运行简单的 hello world 时出现链接器错误
- azure-devops - 如何停止先前排队的发布而不必一次取消它们?
- logic - 熄灯游戏的 Sat 求解器
- node.js - 节点快递,导入模块404
- haskell - Haskell 表达式数据类型
- python - Plotly Dash App:两个相互依赖的组件
- angular - 阻止 Chrome 显示自动填充选项
- npm - lerna publish 和 npm pack 无法打包“dist”文件夹中的所有文件
- ruby - 如何解码 Google::Apis::AdminDirectoryV1::UserPhoto.photo_data
- javascript - Reactstrap 模态在按钮单击时全部打开