using System; using System.Configuration; using System.Linq; using Serilog; using Serilog.Configuration; namespace Serilog { internal class AppSettingsSettings : ILoggerSettings { readonly string SettingPrefix; public AppSettingsSettings(string settingPrefix) { SettingPrefix = string.Format("{0}:", settingPrefix); } public void Configure(LoggerConfiguration loggerConfiguration) { if (loggerConfiguration == null) { throw new ArgumentNullException("loggerConfiguration"); } var settings = ConfigurationManager.AppSettings; var pairs = settings.AllKeys .Where(k => k.StartsWith(SettingPrefix)) .ToDictionary(k => k.Substring(SettingPrefix.Length), k => Environment.ExpandEnvironmentVariables(settings[k])); // Add the FullNetFx assembly by default so that all built-in Serilog sinks are available without "using" pairs.Add("using:_ImpliedSerilogFullNetFx", typeof(AppSettingsSettings).Assembly.FullName); loggerConfiguration.ReadFrom.KeyValuePairs(pairs); } } }