Пример #1
0
        /// <summary>
        /// Configures the specified repository using a <c>log4net</c> element.
        /// </summary>
        /// <param name="repository">The hierarchy to configure.</param>
        /// <param name="element">The element to parse.</param>
        /// <remarks>
        /// <para>
        /// Loads the log4net configuration from the XML element
        /// supplied as <paramref name="element"/>.
        /// </para>
        /// <para>
        /// This method is ultimately called by one of the Configure methods
        /// to load the configuration from an <see cref="XmlElement"/>.
        /// </para>
        /// </remarks>
        static private void InternalConfigureFromXml(ILoggerRepository repository, XmlElement element)
        {
            if (element == null)
            {
                LogLog.Error(declaringType, "ConfigureFromXml called with null 'element' parameter");
            }
            else if (repository == null)
            {
                LogLog.Error(declaringType, "ConfigureFromXml called with null 'repository' parameter");
            }
            else
            {
                LogLog.Debug(declaringType, "Configuring Repository [" + repository.Name + "]");

                IXmlRepositoryConfigurator configurableRepository = repository as IXmlRepositoryConfigurator;
                if (configurableRepository == null)
                {
                    LogLog.Warn(declaringType, "Repository [" + repository + "] does not support the XmlConfigurator");
                }
                else
                {
                    // Copy the xml data into the root of a new document
                    // this isolates the xml config data from the rest of
                    // the document
                    XmlDocument newDoc     = new XmlDocument();
                    XmlElement  newElement = (XmlElement)newDoc.AppendChild(newDoc.ImportNode(element, true));

                    // Pass the configurator the config element
                    configurableRepository.Configure(newElement);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Configures the specified repository using a <c>log4net</c> element.
        /// </summary>
        /// <param name="repository">The hierarchy to configure.</param>
        /// <param name="element">The element to parse.</param>
        /// <remarks>
        /// <para>
        /// Loads the log4net configuration from the XML element
        /// supplied as <paramref name="element" />.
        /// </para>
        /// <para>
        /// This method is ultimately called by one of the Configure methods
        /// to load the configuration from an <see cref="T:System.Xml.XmlElement" />.
        /// </para>
        /// </remarks>
        private static void InternalConfigureFromXml(ILoggerRepository repository, XmlElement element)
        {
            if (element == null)
            {
                LogLog.Error(declaringType, "ConfigureFromXml called with null 'element' parameter");
                return;
            }
            if (repository == null)
            {
                LogLog.Error(declaringType, "ConfigureFromXml called with null 'repository' parameter");
                return;
            }
            LogLog.Debug(declaringType, "Configuring Repository [" + repository.Name + "]");
            IXmlRepositoryConfigurator xmlRepositoryConfigurator = repository as IXmlRepositoryConfigurator;

            if (xmlRepositoryConfigurator == null)
            {
                LogLog.Warn(declaringType, "Repository [" + repository + "] does not support the XmlConfigurator");
                return;
            }
            XmlDocument xmlDocument = new XmlDocument();
            XmlElement  element2    = (XmlElement)xmlDocument.AppendChild(xmlDocument.ImportNode(element, deep: true));

            xmlRepositoryConfigurator.Configure(element2);
        }
Пример #3
0
 private static void InternalConfigureFromXml(ILoggerRepository repository, XmlElement element)
 {
     if (element == null)
     {
         LogLog.Error(declaringType, "ConfigureFromXml called with null 'element' parameter");
     }
     else if (repository == null)
     {
         LogLog.Error(declaringType, "ConfigureFromXml called with null 'repository' parameter");
     }
     else
     {
         LogLog.Debug(declaringType, "Configuring Repository [" + repository.Name + "]");
         IXmlRepositoryConfigurator configurator = repository as IXmlRepositoryConfigurator;
         if (configurator == null)
         {
             LogLog.Warn(declaringType, "Repository [" + repository + "] does not support the XmlConfigurator");
         }
         else
         {
             XmlDocument document = new XmlDocument();
             configurator.Configure((XmlElement)document.AppendChild(document.ImportNode(element, true)));
         }
     }
 }
Пример #4
0
 static private void InternalConfigureFromXml(ILoggerRepository repository, XmlElement element)
 {
     if (repository != null && element != null)
     {
         IXmlRepositoryConfigurator confrepository = repository as IXmlRepositoryConfigurator;
         if (confrepository != null)
         {
             XmlDocument newdoc     = new XmlDocument();
             XmlElement  newelement = (XmlElement)newdoc.AppendChild(newdoc.ImportNode(element, true));
             confrepository.Configure(newelement);
         }
     }
 }
Пример #5
0
        }         // CreateMonitor

        // ----------------------------------------------------------------------
        public override void SetLogFile(string absoluteLogFileName, bool append, string messagePattern)
        {
            if (string.IsNullOrEmpty(absoluteLogFileName))
            {
                throw new ArgumentNullException("absoluteLogFileName");
            }

            string messagePatternToUse = !string.IsNullOrEmpty(messagePattern) ? messagePattern :
                                         "%date{yyyyMMdd-HH:mm:ss.fff}-%-5level-%-25logger{1}: %message%newline";

            // log4net needs to re-load the config file ... so we build one :-)
            IXmlRepositoryConfigurator configurableRepository = LogManager.GetRepository(Assembly.GetCallingAssembly()) as IXmlRepositoryConfigurator;

            if (configurableRepository != null)
            {
                // the most minimal configuration document for defining the new appender:

                /*
                 * <root>
                 *      <appender-ref ref="FILE-DYN" />
                 * </root>
                 * <appender name="FILE-DYN" type="log4net.Appender.FileAppender">
                 *      <file value="path/to/some/log-file.log" />
                 *      <appendToFile value="true" />
                 *      <layout type="log4net.Layout.PatternLayout">
                 *              <conversionPattern value="%date{yyyyMMdd-HH:mm:ss.fff}-%-5level-%-25logger{1}: %message%newline" />
                 *      </layout>
                 * </appender>
                 * //*/
                try
                {
                    XmlDocument doc = new XmlDocument();

                    XmlElement log4netTag = doc.CreateElement("log4net");
                    // the following is the default behavior, just here for documentation ...
                    log4netTag.SetAttribute("update", "Merge");                     // merge with existing configuration
                    doc.AppendChild(log4netTag);

                    XmlElement rootTag = doc.CreateElement("root");
                    log4netTag.AppendChild(rootTag);

                    //XmlElement levelTag = doc.CreateElement( "level" );
                    //levelTag.SetAttribute( "value", "DEBUG" );
                    //rootTag.AppendChild( levelTag );

                    XmlElement consoleAppenderRefTag = doc.CreateElement("appender-ref");
                    consoleAppenderRefTag.SetAttribute("ref", "CONSOLE");
                    rootTag.AppendChild(consoleAppenderRefTag);

                    XmlElement fileAppenderRefTag = doc.CreateElement("appender-ref");
                    fileAppenderRefTag.SetAttribute("ref", "DYN-FILE");
                    rootTag.AppendChild(fileAppenderRefTag);

                    XmlElement consoleAppenderTag = doc.CreateElement("appender");
                    consoleAppenderTag.SetAttribute("name", "CONSOLE");
                    consoleAppenderTag.SetAttribute("type", "log4net.Appender.ConsoleAppender");
                    log4netTag.AppendChild(consoleAppenderTag);

                    XmlElement consoleLayoutTag = doc.CreateElement("layout");
                    consoleLayoutTag.SetAttribute("type", "log4net.Layout.PatternLayout");
                    consoleAppenderTag.AppendChild(consoleLayoutTag);

                    XmlElement consoleConversionPatternTag = doc.CreateElement("conversionPattern");
                    consoleConversionPatternTag.SetAttribute("value", messagePatternToUse);
                    consoleLayoutTag.AppendChild(consoleConversionPatternTag);

                    XmlElement consoleThresholdTag = doc.CreateElement("threshold");
                    consoleThresholdTag.SetAttribute("value", "WARN");
                    consoleAppenderTag.AppendChild(consoleThresholdTag);

                    XmlElement fileAppenderTag = doc.CreateElement("appender");
                    fileAppenderTag.SetAttribute("name", "DYN-FILE");
                    fileAppenderTag.SetAttribute("type", "log4net.Appender.FileAppender");
                    log4netTag.AppendChild(fileAppenderTag);

                    XmlElement fileTag = doc.CreateElement("file");
                    fileTag.SetAttribute("value", absoluteLogFileName);
                    fileAppenderTag.AppendChild(fileTag);

                    XmlElement appendToFileTag = doc.CreateElement("appendToFile");
                    appendToFileTag.SetAttribute("value", append ? "true" : "false");
                    fileAppenderTag.AppendChild(appendToFileTag);

                    XmlElement layoutTag = doc.CreateElement("layout");
                    layoutTag.SetAttribute("type", "log4net.Layout.PatternLayout");
                    fileAppenderTag.AppendChild(layoutTag);

                    XmlElement conversionPatternTag = doc.CreateElement("conversionPattern");
                    conversionPatternTag.SetAttribute("value", messagePatternToUse);
                    layoutTag.AppendChild(conversionPatternTag);

                    configurableRepository.Configure(log4netTag);
                }
                catch (XmlException e)
                {
                    throw new InvalidOperationException(Strings.LoggerLoggingLevelXmlError, e);
                }
            }
            else
            {
                throw new InvalidOperationException(Strings.LoggerLoggingLevelRepository);
            }
        } // SetLogFile