/// <summary> /// Called by the timer when the configuration has been updated. /// </summary> /// <param name="state">null</param> private void OnWatchedFileChange(object state) { XmlConfigurator.InternalConfigure(m_repository, m_configFile); }
/// <summary> /// Attempt to load configuration from a URI /// </summary> /// <param name="sourceAssembly">The assembly that this attribute was defined on.</param> /// <param name="targetRepository">The repository to configure.</param> private void ConfigureFromUri(Assembly sourceAssembly, ILoggerRepository targetRepository) { // Work out the full path to the config file Uri fullPath2ConfigFile = null; // Select the config file if (m_configFile == null || m_configFile.Length == 0) { if (m_configFileExtension == null || m_configFileExtension.Length == 0) { string systemConfigFilePath = null; try { systemConfigFilePath = SystemInfo.ConfigurationFileLocation; } catch (Exception ex) { LogLog.Error(declaringType, "XmlConfiguratorAttribute: Exception getting ConfigurationFileLocation. Must be able to resolve ConfigurationFileLocation when ConfigFile and ConfigFileExtension properties are not set.", ex); } if (systemConfigFilePath != null) { Uri systemConfigFileUri = new Uri(systemConfigFilePath); // Use the default .config file for the AppDomain fullPath2ConfigFile = systemConfigFileUri; } } else { // Force the extension to start with a '.' if (m_configFileExtension[0] != '.') { m_configFileExtension = "." + m_configFileExtension; } string systemConfigFilePath = null; try { systemConfigFilePath = SystemInfo.ConfigurationFileLocation; } catch (Exception ex) { LogLog.Error(declaringType, "XmlConfiguratorAttribute: Exception getting ConfigurationFileLocation. Must be able to resolve ConfigurationFileLocation when the ConfigFile property are not set.", ex); } if (systemConfigFilePath != null) { UriBuilder builder = new UriBuilder(new Uri(systemConfigFilePath)); // Remove the current extension from the systemConfigFileUri path string path = builder.Path; int startOfExtension = path.LastIndexOf("."); if (startOfExtension >= 0) { path = path.Substring(0, startOfExtension); } path += m_configFileExtension; builder.Path = path; fullPath2ConfigFile = builder.Uri; } } } else { string applicationBaseDirectory = null; try { applicationBaseDirectory = SystemInfo.ApplicationBaseDirectory; } catch (Exception ex) { LogLog.Warn(declaringType, "Exception getting ApplicationBaseDirectory. ConfigFile property path [" + m_configFile + "] will be treated as an absolute URI.", ex); } if (applicationBaseDirectory != null) { // Just the base dir + the config file fullPath2ConfigFile = new Uri(new Uri(applicationBaseDirectory), m_configFile); } else { fullPath2ConfigFile = new Uri(m_configFile); } } if (fullPath2ConfigFile != null) { if (fullPath2ConfigFile.IsFile) { // The m_configFile could be an absolute local path, therefore we have to be // prepared to switch back to using FileInfos here ConfigureFromFile(targetRepository, new FileInfo(fullPath2ConfigFile.LocalPath)); } else { if (m_configureAndWatch) { LogLog.Warn(declaringType, "XmlConfiguratorAttribute: Unable to watch config file loaded from a URI"); } XmlConfigurator.Configure(targetRepository, fullPath2ConfigFile); } } }