如何在 .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");
  }
}