Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net core 如何使用ConsoleLogger提供程序创建LoggerFactory?_.net Core_Asp.net Core 2.2 - Fatal编程技术网

.net core 如何使用ConsoleLogger提供程序创建LoggerFactory?

.net core 如何使用ConsoleLogger提供程序创建LoggerFactory?,.net-core,asp.net-core-2.2,.net Core,Asp.net Core 2.2,有四个构造函数: consoleLogger提供程序(IConsoleLogger设置) ConsoleLogger提供程序(IOptionsMonitor) ConsoleLogger提供程序(Func,布尔) ConsoleLogger提供程序(Func、布尔、布尔) 其中三个已被此消息宣布为已过时: 此方法已过时,将在将来的版本中删除。推荐的替代方法是使用LoggerFactory配置筛选,使用ConsoleLogger选项配置日志选项 使用构造函数#3,使用ConsoleLoggerPr

有四个构造函数:

  • consoleLogger提供程序(IConsoleLogger设置)
  • ConsoleLogger提供程序(IOptionsMonitor)
  • ConsoleLogger提供程序(Func,布尔)
  • ConsoleLogger提供程序(Func、布尔、布尔)
  • 其中三个已被此消息宣布为已过时:

    此方法已过时,将在将来的版本中删除。推荐的替代方法是使用LoggerFactory配置筛选,使用ConsoleLogger选项配置日志选项

    使用构造函数#3,使用
    ConsoleLoggerProvider
    创建
    LoggerFactory
    非常简单(如上所述):

    var loggerFactory=new loggerFactory(new[]{new ConsoleLoggerProvider((类别,级别)=>level>=LogLevel.Information,true)});
    
    但由于它已被弃用,我们只剩下构造函数#2。以下是我发现的等价物:

    var configureNamedOptions=new configureNamedOptions(“,null);
    var optionsFactory=newoptionsfactory(new[]{configureNamedOptions},Enumerable.Empty());
    var optionsMonitor=new optionsMonitor(optionsFactory,Enumerable.Empty(),new optioncache());
    var loggerFactory=new loggerFactory(new[]{new ConsoleLoggerProvider(optionsMonitor)},new LoggerFilterOptions{MinLevel=LogLevel.Information});
    

    这似乎太复杂了,我是不是错过了一些更简单的东西?

    在.NET Core 2.2中,您可以通过Microsoft的依赖项注入框架构建一个
    ILoggerFactory
    ,而无需使用过时的方法。它比所有东西都是手工构建的版本要简单一点。以下是方法:

    使用Microsoft.Extensions.DependencyInjection;
    使用Microsoft.Extensions.Logging;
    IServiceCollection serviceCollection=新serviceCollection();
    serviceCollection.AddLogging(生成器=>builder
    .AddConsole()
    .AddFilter(级别=>级别>=日志级别.Information)
    );
    var loggerFactory=servicecolection.BuildServiceProvider().GetService();
    
    在.NET Core 3.0中,您可以使用:

    var loggerFactory=loggerFactory.Create(builder=>{
    builder.AddFilter(“Microsoft”,LogLevel.Warning)
    .AddFilter(“系统”,日志级别。警告)
    .AddFilter(“SampleApp.Program”,LogLevel.Debug)
    .AddConsole();
    }
    );
    
    @0xced感谢您解构的示例,因为代理不在Powershell中工作,这有助于我在Powershell中执行同样的操作:

    $optionsFactory = [OptionsFactory[ConsoleLoggerOptions]]::new(
        [List[ConfigureNamedOptions[ConsoleLoggerOptions]]]@(
            [ConfigureNamedOptions[ConsoleLoggerOptions]]::new('',$null)
        ),
        [List[IPostConfigureOptions[ConsoleLoggerOptions]]]::new()
    )
    
    $optionsMonitor = [OptionsMonitor[ConsoleLoggerOptions]]::new(
        $optionsFactory,
        [List[IOptionsChangeTokenSource[ConsoleLoggerOptions]]]::new(),
        [OptionsCache[ConsoleLoggerOptions]]::new()
    )
    
    $consoleLoggerProvider = [ConsoleLoggerProvider]$OptionsMonitor
    $consoleLoggerProviderList = [List[ILoggerProvider]]::new()
    $consoleLoggerProviderList.add($consoleLoggerProvider)
    
    $loggerFactory = [LoggerFactory]::new(
        $consoleLoggerProviderList,
        [LoggerFilterOptions]@{
            MinLevel = [LogLevel]::Information
        }
    )
    

    以防万一,如果有人想在asp.net core composition root for efcore中执行此操作:

    services.AddDbContext<DbContext>(opt => {
        opt.AddSqlServer(Configuration.GetConnectionString("DefaultConnection"));
        opt.UseLoggerFactory(LoggerFactory.Create(builder => { builder.AddConsole(); }));
    });
    
    services.AddDbContext(opt=>{
    opt.AddSqlServer(Configuration.GetConnectionString(“DefaultConnection”);
    opt.UseLoggerFactory(LoggerFactory.Create(builder=>{builder.AddConsole();}));
    });
    
    这对于应用程序组合来说非常好,但当我编写测试或使用REPL时又如何呢?如果能够以更直接的方式实现
    ILogger
    依赖关系,那就太好了
    LoggerFactory
    几乎足够短,但可发现性并不理想…仅供参考第一个示例。AddConsole()需要引用Microsoft.Extensions.Logging.ConsoleMethoding@Microsoft,而对于这样一个简单的任务,我们需要依赖项注入和一系列选项,providers and factoriesFYI使用.AddConsole()还要求您导入nuget软件包Microsoft.Extensions.Logging.Console。这绝对是.NET5的疯狂,它变得更糟,而不是更好。。。。。