Nlog.Mongo 从 appsetting.json 获取连接

Nlog.Mongo get connection from appsetting.json

我正在 运行安装 .net core 2.0 应用程序并使用 NLog Mongo 进行日志记录。有办法从我的应用程序设置文件中获取 NLog.Mongo 的连接字符串吗?文档说我可以指定一个连接名称 (connectionName) 以从配置文件 (https://github.com/loresoft/NLog.Mongo) 中获取。

我的 appsettings.Development.json 有以下内容:

  "DatabaseSettings": {
    "ConnectionString": "mongodb://localhost:27017",
    "Database": "myDbName",
    "IsSSL": false
  }

nlog.config

<target xsi:type="Mongo"
    name="mongoDefault"
    connectionName="DatabaseSettings"
    cappedCollectionSize="26214400">
  <property name="ThreadID" layout="${threadid}" bsonType="Int32" />
  <property name="ThreadName" layout="${threadname}" />
  <property name="ProcessID" layout="${processid}" bsonType="Int32" />
  <property name="ProcessName" layout="${processname:fullName=true}" />
  <property name="UserName" layout="${windows-identity}" />
</target>

当我 运行 应用程序时出现错误:

NLog.NLogConfigurationException: 无法解析 MongoDB ConnectionString。请确保 ConnectionString 属性 已设置

使用 NLog.Mongo 版本重试。 4.6.0.68

https://www.nuget.org/packages/NLog.Mongo/

应包括以下 PR:

https://github.com/loresoft/NLog.Mongo/pull/22

更新 NLog.Extension.Logging 版本。 1.4.0

与 NLog.Extension.Logging 版本。 1.4.0 那么你现在可以使用 ${configsetting}

另请参阅:https://github.com/NLog/NLog/wiki/ConfigSetting-Layout-Renderer

一个替代方案,如果你不能更新你的 NLog.Mongo 包,在 @Rolf Kristensen 解决方案之前,我在 Startup.cs (ConfigureServices)

上使用了这段代码
string conn = Configuration.GetSection("DatabaseSettings").GetValue<string>("ConnectionString");
string dbName = Configuration.GetSection("DatabaseSettings").GetValue<string>("Database");
var config = NLog.LogManager.Configuration;
var dbTarget = (NLog.Mongo.MongoTarget)config.FindTargetByName("mongoDefault");
dbTarget.ConnectionString = conn;
dbTarget.DatabaseName = dbName;
NLog.LogManager.ReconfigExistingLoggers();