Example #1
0
        /// <summary>
        /// Loads this configuration from a <see cref="XElement"/>.
        /// </summary>
        /// <param name="e">The xml element: its name must be GrandOutputConfiguration.</param>
        /// <param name="monitor">Monitor that will be used.</param>
        /// <returns>True on success, false if the configuration can not be read.</returns>
        public bool Load(XElement e, IActivityMonitor monitor)
        {
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }
            if (monitor == null)
            {
                throw new ArgumentNullException("monitor");
            }
            try
            {
                if (e.Name != "GrandOutputConfiguration")
                {
                    throw new XmlException("Element name must be <GrandOutputConfiguration>." + e.GetLineColumnString());
                }
                // AppDomainDefaultFilter was the name before.
                LogFilter?globalDefaultFilter = e.GetAttributeLogFilter("GlobalDefaultFilter", false)
                                                ?? e.GetAttributeLogFilter("AppDomainDefaultFilter", false);

                SourceFilterApplyMode          applyMode;
                Dictionary <string, LogFilter> sourceFilter = ReadSourceOverrideFilter(e, out applyMode, monitor);
                if (sourceFilter == null)
                {
                    return(false);
                }

                RouteConfiguration routeConfig;
                using (monitor.OpenGroup(LogLevel.Trace, "Reading root Channel.", null))
                {
                    XElement channelElement = e.Element("Channel");
                    if (channelElement == null)
                    {
                        monitor.SendLine(LogLevel.Error, "Missing <Channel /> element." + e.GetLineColumnString(), null);
                        return(false);
                    }
                    routeConfig = FillRoute(monitor, channelElement, new RouteConfiguration());
                }
                // No error: set the new values.
                _routeConfig           = routeConfig;
                _sourceFilter          = sourceFilter;
                _sourceFilterApplyMode = applyMode;
                _globalDefaultFilter   = globalDefaultFilter;
                return(true);
            }
            catch (Exception ex)
            {
                monitor.SendLine(LogLevel.Error, null, ex);
            }
            return(false);
        }
Example #2
0
        static Dictionary <string, LogFilter> ReadSourceOverrideFilter(XElement e, out SourceFilterApplyMode apply, IActivityMonitor monitor)
        {
            apply = SourceFilterApplyMode.None;
            using (monitor.OpenGroup(LogLevel.Trace, "Reading SourceOverrideFilter elements.", null))
            {
                try
                {
                    var s = e.Element("SourceOverrideFilter");
                    if (s == null)
                    {
                        monitor.CloseGroup("No source filtering (ApplyMode is None).");
                        return(new Dictionary <string, LogFilter>());
                    }
                    apply = s.AttributeEnum("ApplyMode", SourceFilterApplyMode.Apply);

                    var stranger = e.Elements("SourceOverrideFilter").Elements().FirstOrDefault(f => f.Name != "Add" && f.Name != "Remove");
                    if (stranger != null)
                    {
                        throw new XmlException("SourceOverrideFilter element must contain only Add and Remove elements." + stranger.GetLineColumnString());
                    }
                    var result = e.Elements("SourceOverrideFilter")
                                 .Elements()
                                 .Select(f => new
                    {
                        File   = f.AttributeRequired("File"),
                        Filter = f.Name == "Add"
                                                                    ? f.GetRequiredAttributeLogFilter("Filter")
                                                                    : (LogFilter?)LogFilter.Undefined
                    })
                                 .Where(f => !String.IsNullOrWhiteSpace(f.File.Value))
                                 .ToDictionary(f => f.File.Value, f => f.Filter.Value);
                    monitor.CloseGroup(String.Format("{0} source files, ApplyMode is {1}.", result.Count, apply));
                    return(result);
                }
                catch (Exception ex)
                {
                    monitor.SendLine(LogLevel.Error, "Error while reading SourceOverrideFilter element.", ex);
                    return(null);
                }
            }
        }
        /// <summary>
        /// Loads this configuration from a <see cref="XElement"/>.
        /// </summary>
        /// <param name="e">The xml element: its name must be GrandOutputConfiguration.</param>
        /// <param name="monitor">Monitor that will be used.</param>
        /// <returns>True on success, false if the configuration can not be read.</returns>
        public bool Load( XElement e, IActivityMonitor monitor )
        {
            if( e == null ) throw new ArgumentNullException( "e" );
            if( monitor == null ) throw new ArgumentNullException( "monitor" );
            try
            {
                if( e.Name != "GrandOutputConfiguration" ) throw new XmlException( "Element name must be <GrandOutputConfiguration>." + e.GetLineColumnString() );
                // AppDomainDefaultFilter was the name before.
                LogFilter? globalDefaultFilter = e.GetAttributeLogFilter( "GlobalDefaultFilter", false ) 
                                                    ?? e.GetAttributeLogFilter( "AppDomainDefaultFilter", false );

                SourceFilterApplyMode applyMode;
                Dictionary<string, LogFilter> sourceFilter = ReadSourceOverrideFilter( e, out applyMode, monitor );
                if( sourceFilter == null ) return false;

                RouteConfiguration routeConfig;
                using( monitor.OpenGroup( LogLevel.Trace, "Reading root Channel.", null ) )
                {
                    XElement channelElement = e.Element( "Channel" );
                    if( channelElement == null )
                    {
                        monitor.SendLine( LogLevel.Error, "Missing <Channel /> element." + e.GetLineColumnString(), null );
                        return false;
                    }
                    routeConfig = FillRoute( monitor, channelElement, new RouteConfiguration() );
                }
                // No error: set the new values.
                _routeConfig = routeConfig;
                _sourceFilter = sourceFilter;
                _sourceFilterApplyMode = applyMode;
                _globalDefaultFilter = globalDefaultFilter;
                return true;
            }
            catch( Exception ex )
            {
                monitor.SendLine( LogLevel.Error, null, ex );
            }
            return false;
        }
        static Dictionary<string, LogFilter> ReadSourceOverrideFilter( XElement e, out SourceFilterApplyMode apply, IActivityMonitor monitor )
        {
            apply = SourceFilterApplyMode.None;
            using( monitor.OpenGroup( LogLevel.Trace, "Reading SourceOverrideFilter elements.", null ) )
            {
                try
                {
                    var s = e.Element( "SourceOverrideFilter" );
                    if( s == null )
                    {
                        monitor.CloseGroup( "No source filtering (ApplyMode is None)." );
                        return new Dictionary<string, LogFilter>();
                    }
                    apply = s.AttributeEnum( "ApplyMode", SourceFilterApplyMode.Apply );

                    var stranger =  e.Elements( "SourceOverrideFilter" ).Elements().FirstOrDefault( f => f.Name != "Add" && f.Name != "Remove" );
                    if( stranger != null )
                    {
                        throw new XmlException( "SourceOverrideFilter element must contain only Add and Remove elements." + stranger.GetLineColumnString() );
                    }
                    var result = e.Elements( "SourceOverrideFilter" )
                                    .Elements()
                                    .Select( f => new
                                                    {
                                                        File = f.AttributeRequired( "File" ),
                                                        Filter = f.Name == "Add"
                                                                    ? f.GetRequiredAttributeLogFilter( "Filter" )
                                                                    : (LogFilter?)LogFilter.Undefined
                                                    } )
                                    .Where( f => !String.IsNullOrWhiteSpace( f.File.Value ) )
                                    .ToDictionary( f => f.File.Value, f => f.Filter.Value );
                    monitor.CloseGroup( String.Format( "{0} source files, ApplyMode is {1}.", result.Count, apply ) );
                    return result;
                }
                catch( Exception ex )
                {
                    monitor.SendLine( LogLevel.Error, "Error while reading SourceOverrideFilter element.", ex );
                    return null;
                }
            }
        }