我正在使用以下命令创建控制台记录器:
_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/