NLog.Config 从 IIS Express 文件夹而不是 Content Root 读取

NLog.Config read from IIS Express folder instead of Content Root

我正在编写一个 ASP.NET 核心 2.2 服务,它使用 Common.LoggingNLog

我在 appsettings.json 文件中使用 NLog 连接了 Common.Logging:

  "LogConfiguration": {
    "factoryAdapter": {
      "type": "Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog45",
      "arguments": {
        "configType": "FILE",
        "configFile": "~/nlog.config"
      }
    }
  }

并且在 Startup.cs 中我添加了:

    var logConfiguration = new LogConfiguration();
    Configuration.GetSection("LogConfiguration").Bind(logConfiguration);
    LogManager.Configure(logConfiguration);

当我启动我的服务时,代码命中 logger.InfoI get a The type initializer for '...' threw an exception

对于 NLog,这通常意味着没有找到目标。我用Procmon.exe搜索了nlog.config的访问失败,发现了一个尝试读取:C:\Program Files\IIS Express\~\nlog.config.

如何让 IIS Express 在内容根目录中查找 nlog.config?

为什么不像 PullRequest 中所示那样做:

{
  "LogConfiguration": {
    "factoryAdapter": {
      "type": "Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog45",
      "arguments": {
        "configType": "INLINE",
      }
    }
  }
}

并让 NLog 4.5 加载自己的 LoggingConfiguration。

https://github.com/net-commons/common-logging/pull/176

您还可以从所需位置显式记录 NLog.config:

https://github.com/NLog/NLog/wiki/Explicit-NLog-configuration-loading