Override Connection String at NLog Config Setting
2015/05/011 min read
bookmark this
Table of Contents
- Introduction
- NLog Database Target Configuration
- Dynamically Change Connection String in Code
- Conclusion
Introduction
You can define log-to-database settings in NLog, but you can't change the connection string depending on your environment. This blog shows how to dynamically change the connection string in C# based on your environment.
NLog Database Target Configuration
<?xml version="1.0" encoding="utf-8" ?>
<!--
See http://nlog-project.org/wiki/Configuration_file
for information on customizing logging rules and outputs.
-->
Data Source=databaseservername;Initial Catalog=databasename;User Id=username;Password=password;
insert into YourTableForLogging(date,level,message,machine_name, user_name, call_site,thread, exception, stacktrace) values(@time_stamp, @level, @message,@machinename, @user_name, @call_site, @threadid, @log_exception, @stacktrace);
<!-- add your logging rules here -->
Dynamically Change Connection String in Code
The following code shows how to dynamically change the connection string defined in NLog:
using (var databaseTarget = (DatabaseTarget)LogManager.Configuration.FindTargetByName("database"))
{
var entityFrameworkConnection = ConfigurationManager.ConnectionStrings["MyDatabaseName"].ConnectionString;
var builder = new EntityConnectionStringBuilder(entityFrameworkConnection);
var connectionString = builder.ProviderConnectionString;
databaseTarget.ConnectionString = connectionString;
}
Conclusion
By using LogManager.Configuration.FindTargetByName and EntityConnectionStringBuilder, you can dynamically override the NLog database target's connection string at runtime. This approach allows you to use different connection strings for different environments without modifying the NLog config file.