首页 > 解决方案 > 如何将 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#.net-coredependency-injectionconsole-applicationserilog

解决方案


推荐阅读