【问题标题】:How do I write to a named logger with NLog in .net core?如何在 .net 核心中使用 NLog 写入命名记录器?
【发布时间】:2021-02-24 12:08:42
【问题描述】:

我需要为同一个文件中的不同错误写入不同的日志文件。

这在 .net 4 中很简单,我只需调用 LogManager.GetLogger("logname")。所以我可以针对特定的记录器。

但是在 .net 核心中,我只有注入的 ILogger<MyClass>,它会写入所有记录器。

如何定位 .net 核心中的特定记录器?

【问题讨论】:

标签: asp.net-core nlog


【解决方案1】:

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 Dependency Injection 提供 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");
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2021-09-07
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    相关资源
    最近更新 更多