Jez*_*Jez 4 c# logging asp.net-core
看来Microsoft确实在尝试使用.NET Core来简化DI,但我不确定为什么,但是坦率地说,我的控制台应用程序又小又简单,我只是不想为构建一个完整的DI容器而已。做一些简单的日志记录。如何在不使用DI的情况下登录.NET Core?我读过的所有内容都假定您将使用.NET Core的内置日志记录体系结构,该体系结构显然需要DI,但是必须有一种方法可以在类上不使用静态变量的情况下不进行DI?
noo*_*ntz 20
根据 Scotts 答案中 Ilyas 和 bokibegs 的评论,这里是 .NET 5.0 当前工作的代码:
using Microsoft.Extensions.Logging;
Run Code Online (Sandbox Code Playgroud)
var factory = LoggerFactory.Create(builder => {
builder.AddConsole();
});
var logger = factory.CreateLogger<T>();
Run Code Online (Sandbox Code Playgroud)
这需要Microsoft.Extensions.Logging和Microsoft.Extensions.Logging.Consolenuget 包。
我最终做的是使用 NLog,而不是使用他们的 .NET Core DI 扩展,我只是包含了主要的 NLog NuGet 包,手动创建我自己的NLog.config文件,然后按照教程将其GetCurrentClassLogger()创建为我的类的静态成员,然后直接将其用于日志记录。这是一个非常简单的设置,不需要 DI。NLog 可能应该更好地记录它。
如果您想自己做,则需要在某个地方实例化LoggerFactory实例并配置所需的提供程序。然后,您只需要调用CreateLogger来创建实例或用于new Logger<T>(ILoggerFactory)创建记录器。
using Microsoft.Extensions.Logging;
static class MyLogger {
public static ILoggerFactory LoggerFactory {get;}
static MyLogger() {
LoggerFactory = new LoggerFactory();
LoggerFactory.AddConsole();
}
}
public MyClass {
private readonly ILogger _logger = new Logger<MyClass>(MyLogger.LoggerFactory);
}
Run Code Online (Sandbox Code Playgroud)