private static void ConfigureSeqLogger(IConfigProvider configProvider) { ISeqConfig seqConfig = configProvider.GetConfig <ISeqConfig>(); if (seqConfig.MinLevel != "Off") { if (_logger.IsInfo) { _logger.Info($"Seq Logging enabled on host: {seqConfig.ServerUrl} with level: {seqConfig.MinLevel}"); } NLogConfigurator.ConfigureSeqBufferTarget(seqConfig.ServerUrl, seqConfig.ApiKey, seqConfig.MinLevel); } }
private static IConfigProvider BuildConfigProvider( CommandLineApplication app, CommandOption loggerConfigSource, CommandOption logLevelOverride, CommandOption configsDirectory, CommandOption configFile) { ILogger logger = SimpleConsoleLogger.Instance; if (loggerConfigSource.HasValue()) { string nLogPath = loggerConfigSource.Value(); logger.Info($"Loading NLog configuration file from {nLogPath}."); try { LogManager.Configuration = new XmlLoggingConfiguration(nLogPath); } catch (Exception e) { logger.Info($"Failed to load NLog configuration from {nLogPath}. {e}"); } } else { logger.Info($"Loading standard NLog.config file from {"NLog.config".GetApplicationResourcePath()}."); Stopwatch stopwatch = Stopwatch.StartNew(); LogManager.Configuration = new XmlLoggingConfiguration("NLog.config".GetApplicationResourcePath()); stopwatch.Stop(); logger.Info($"NLog.config loaded in {stopwatch.ElapsedMilliseconds}ms."); } // TODO: dynamically switch log levels from CLI! if (logLevelOverride.HasValue()) { NLogConfigurator.ConfigureLogLevels(logLevelOverride); } ConfigProvider configProvider = new ConfigProvider(); Dictionary <string, string> configArgs = new Dictionary <string, string>(); foreach (CommandOption commandOption in app.Options) { if (commandOption.HasValue()) { configArgs.Add(commandOption.LongName, commandOption.Value()); } } IConfigSource argsSource = new ArgsConfigSource(configArgs); configProvider.AddSource(argsSource); configProvider.AddSource(new EnvConfigSource()); string configDir = configsDirectory.HasValue() ? configsDirectory.Value() : DefaultConfigsDirectory; string configFilePath = configFile.HasValue() ? configFile.Value() : DefaultConfigFile; string?configPathVariable = Environment.GetEnvironmentVariable("NETHERMIND_CONFIG"); if (!string.IsNullOrWhiteSpace(configPathVariable)) { configFilePath = configPathVariable; } if (!PathUtils.IsExplicitlyRelative(configFilePath)) { if (configDir == DefaultConfigsDirectory) { configFilePath = configFilePath.GetApplicationResourcePath(); } else { configFilePath = Path.Combine(configDir, string.Concat(configFilePath)); } } if (!Path.HasExtension(configFilePath) && !configFilePath.Contains(Path.DirectorySeparatorChar)) { string redirectedConfigPath = Path.Combine(configDir, string.Concat(configFilePath, ".cfg")); configFilePath = redirectedConfigPath; if (!File.Exists(configFilePath)) { throw new InvalidOperationException($"Configuration: {configFilePath} was not found."); } } if (!Path.HasExtension(configFilePath)) { configFilePath = string.Concat(configFilePath, ".cfg"); } // Fallback to "{executingDirectory}/configs/{configFile}" if "configs" catalog was not specified. if (!File.Exists(configFilePath)) { string configName = Path.GetFileName(configFilePath); string?configDirectory = Path.GetDirectoryName(configFilePath); string redirectedConfigPath = Path.Combine(configDirectory ?? string.Empty, configDir, configName); configFilePath = redirectedConfigPath; if (!File.Exists(configFilePath)) { throw new InvalidOperationException($"Configuration: {configFilePath} was not found."); } } logger.Info($"Reading config file from {configFilePath}"); configProvider.AddSource(new JsonConfigSource(configFilePath)); configProvider.Initialize(); logger.Info("Configuration initialized."); return(configProvider); }