我知道
ILoggerFactory
使我能够按名称创建记录器提供程序。
我到底该怎么做?
假设我有
LoggerProvider1
和 LoggerProvider2
。
这是我的
Program.cs
文件:
srv.AddLogging(builder =>
{
builder.ClearProviders();
builder.AddProvider(new LoggerProvider1());
builder.AddProvider(new LoggerProvider2());
});
我需要在这里做什么?
public class MyFactory : ILoggerFactory
{
}
在
MyFactory
文件中哪里加载 Program.cs
?
如何这样称呼
ILoggerFactory
ILoggerFactory factory;
factory.CreateLogger<HomeController>("LoggerProvider1");
factory.CreateLogger<HomeController>("LoggerProvider2");
Factory是日志记录中的最高级别。默认情况下,一旦您构建应用程序,Asp.Net 就会将其实例添加到服务中。
LoggerProvider 是此工作流程的中间层。工厂内可以有一个或多个提供者,他们的工作是创建用于记录数据的
Logger
实例。
Logger 是最低级别的日志记录,您需要与之交互来记录数据。
由于.NET已经为您创建了工厂,您需要向其中添加提供程序。 您可以使用您编写的代码来做到这一点:
srv.AddLogging(builder =>
{
builder.ClearProviders();
builder.AddProvider(new LoggerProvider1());
builder.AddProvider(new LoggerProvider2());
});
剩下要做的唯一一件事就是使用依赖注入获取
ILogger
的实例(将由提供者自动创建)。
因此,如果您想在
MyClass
中记录某些内容,您可以这样做:
public class MyClass
{
public MyClass(ILogger logger)
{
logger.LogInformation("Hello from logger");
}
}
或更常见:
public class MyClass
{
public MyClass(ILogger<MyClass> logger)
{
logger.LogInformation("Hello from logger");
}
}
为了能够在其他方法中使用它,请将其拉出:
public class MyClass
{
private readonly ILogger<MyClass> _logger;
public MyClass(ILogger<MyClass> logger)
{
_logger = logger;
}
public void Log()
{
_logger.LogInformation("Hello from another method");
}
}