logging - 网核 : manually create a Logger without using LoggerFactory

标签 logging dependency-injection .net-core

我正在使用以下命令创建控制台记录器:

_log = new LoggerFactory().AddConsole().CreateLogger(this.GetType().Name);

现在我收到以下警告:
controllers\DummyController.cs(31,20): warning CS0618:
'ConsoleLoggerExtensions.AddConsole(ILoggerFactory)' is obsolete: 
'This method is obsolete and will be removed in a future version. The 
recommended alternative is AddConsole(this ILoggingBuilder builder).' 

我不在依赖注入(inject)容器的上下文中。

更新:
我也尝试过像这样使用 DI:
var serviceProvider = new ServiceCollection()
    .AddLogging()
    .BuildServiceProvider();
var log = serviceProvider.GetService<ILogger>();
log.LogInformation("testing _log");

但我收到以下错误:
Error Message:                                                                                                                                                
  System.ArgumentNullException : Value cannot be null.                                                                                                         
Parameter name: logger                                                                                                                                        
Stack Trace:                                                                                                                                                  
   at Microsoft.Extensions.Logging.LoggerExtensions.Log(ILogger logger, LogLevel logLevel, EventId eventId, Exception exception, String message, Object[] args)                                                                                                                                                             
   at Microsoft.Extensions.Logging.LoggerExtensions.LogInformation(ILogger logger, String message, Object[] args)      

看来我无法从容器中获取记录器

最佳答案

接口(interface)已更改,因此您可以在 LoggerFactory 上使用静态 Create() 工厂方法,并在配置提供程序的配置对象中传递一个委托(delegate)。然后可以像以前一样使用工厂创建记录器:

    ILogger<Program> logger = LoggerFactory
        .Create(logging => logging.AddConsole())
        .CreateLogger<Program>();
    logger.LogInformation("Hello World!");
虽然应用程序通常应该使用主机构建器,但这在单元测试中非常有用,因为您可以传入一个写入控制台(而不是模拟)的真实记录器,并在测试结果中查看输出。
这取自简单的演练示例:https://github.com/sgryphon/essential-logging/tree/master/examples/GettingStarted
还有更多示例展示了如何通过主机构建器进行配置,以及如何使用 Microsoft 高性能日志记录模式。

关于logging - 网核 : manually create a Logger without using LoggerFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54373311/

相关文章:

MYSQL,毫秒日志记录,操作系统 :windows 2012, 深度问题

dependency-injection - 依赖注入(inject)框架 : Why do I care?

asp.net-mvc - 模型的依赖注入(inject)

c# - 将字符串上传到 Azure Blob

logging - 在 NLog 文件路径中使用应用数据目录

c# - 配置 Serilog.Extensions.Logging.File

java - 在 log4j.xml 中使用 RollingFileAppender 创建两个日志文件

android - Butterknife View 注入(inject)

c# - 在 ASP.NET Core 上检测与 SSE 的断开连接

azure - Azure Web App 的替代 Azure 资源来运行后台服务