如何在 .net 核心中使用 NLog 写入命名记录器?
How do I write to a named logger with NLog in .net core?
我需要为同一文件中的不同错误写入各种日志文件。
这在 .net 4 中很简单,因为我只是调用 LogManager.GetLogger("logname")
。所以我可以针对特定的记录器。
但是在 .net 核心中我只有注入 ILogger<MyClass>
并且它写入所有记录器。
如何在 .net core 中定位特定的记录器?
Microsoft 扩展日志记录 (MEL) 使用通用 ILogger<T>
作为创建充满类型名称的 ILogger
的技巧。
但不是这样做:
public class MyClass
{
private readonly ILogger _logger; // Notice no generic
public MyClass(ILogger<MyClass> logger)
{
_logger = logger;
_logger.LogInformation("Hello");
}
}
然后可以要求 Microsoft 依赖注入提供 ILoggerFactory
作为构造函数参数:
public class MyClass
{
private readonly ILogger _logger; // Notice no generic
public MyClass(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger(GetType().ToString()); // Performance hit
_logger.LogInformation("Hello");
var otherLogger = loggerFactory.CreateLogger("LogName"); // Same as LogManager.GetLogger("logname")
otherLogger.LogInformation("Hello Again");
}
}
我需要为同一文件中的不同错误写入各种日志文件。
这在 .net 4 中很简单,因为我只是调用 LogManager.GetLogger("logname")
。所以我可以针对特定的记录器。
但是在 .net 核心中我只有注入 ILogger<MyClass>
并且它写入所有记录器。
如何在 .net core 中定位特定的记录器?
Microsoft 扩展日志记录 (MEL) 使用通用 ILogger<T>
作为创建充满类型名称的 ILogger
的技巧。
但不是这样做:
public class MyClass
{
private readonly ILogger _logger; // Notice no generic
public MyClass(ILogger<MyClass> logger)
{
_logger = logger;
_logger.LogInformation("Hello");
}
}
然后可以要求 Microsoft 依赖注入提供 ILoggerFactory
作为构造函数参数:
public class MyClass
{
private readonly ILogger _logger; // Notice no generic
public MyClass(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger(GetType().ToString()); // Performance hit
_logger.LogInformation("Hello");
var otherLogger = loggerFactory.CreateLogger("LogName"); // Same as LogManager.GetLogger("logname")
otherLogger.LogInformation("Hello Again");
}
}