JianYA
JianYA

Reputation: 3024

NLog use Connection String Name in appsettings

I have an NLog database target that looks like this:

<target xsi:type="Database" name="database"
      connectionString="Server=.\SQLEXPRESS;Database=ApplicationOne;Trusted_Connection=True;MultipleActiveResultSets=true;User Id=User0101;Password=PW0101"   
      commandText="INSERT INTO [SchemaOne].[EventLogs](Id, Message, Level, Logger )VALUES(NewID(), @Message, @Level, @Logger)">
  <parameter name="@Message" layout="${message}" />
  <parameter name="@Level" layout="${level}" />
  <parameter name="@Logger" layout="${logger}" />
</target>

Is it possible to change the connectionString to use connectionStringName from my appsettings instead?

My appsettings is called dssettings.json and it contains the connection details here:

"DatabaseConfiguration": {
    "DatabaseName": "ApplicationOne",
    "ConnectionName": "DefaultConnection",
    "ConnectionString": "Server=.\\SQLEXPRESS;Database=ApplicationOne;Trusted_Connection=True;MultipleActiveResultSets=true;User Id=User0101;Password=PW0101" 
  },

Upvotes: 11

Views: 11869

Answers (2)

Ahmadreza Farrokhnejad
Ahmadreza Farrokhnejad

Reputation: 2390

1- Install NLog.Extensions.Logging from nuget

2- Change connectionString like this

<target xsi:type="Database" name="database"
      connectionString="${configsetting:item=DatabaseConfiguration.ConnectionString}"   
      commandText="INSERT INTO [SchemaOne].[EventLogs](Id, Message, Level, Logger )VALUES(NewID(), @Message, @Level, @Logger)">
  <parameter name="@Message" layout="${message}" />
  <parameter name="@Level" layout="${level}" />
  <parameter name="@Logger" layout="${logger}" />
</target>

Upvotes: 0

Rolf Kristensen
Rolf Kristensen

Reputation: 19867

Update NLog.Extension.Logging ver. 1.4.0

With NLog.Extension.Logging ver. 1.4.0 then you can now use ${configsetting}

See also: https://github.com/NLog/NLog/wiki/ConfigSetting-Layout-Renderer

Original Answer

With help from nuget-package NLog.Appsettings.Standard then you can normally do this:

  <extensions>
    <add assembly="NLog.Appsettings.Standard" />
  </extensions>
  <targets>
    <target xsi:type="Database" name="database"
          connectionString="${appsettings:name=DatabaseConfiguration.ConnectionString}"   
          commandText="INSERT INTO [SchemaOne].[EventLogs](Id, Message, Level, Logger )VALUES(NewID(), @Message, @Level, @Logger)">
      <parameter name="@Message" layout="${message}" />
      <parameter name="@Level" layout="${level}" />
      <parameter name="@Logger" layout="${logger}" />
    </target>
  </targets>

But because you are using a special dssettings.json (instead of appsettings.json), then you probably have to implement your own custom NLog layout renderer:

https://github.com/NLog/NLog/wiki/How-to-write-a-custom-layout-renderer

Maybe you can use the source-code from the above nuget-package as inspiration for loading dssettings.json. Or maybe create PullRequest that adds support for specifying non-default config-filename.

Upvotes: 10

Related Questions