Esempio n. 1
0
 public CustomTraceListenerSetting(BasicCustomTraceListenerData sourceElement,
                                   string name,
                                   string listenerType,
                                   string initData,
                                   string[] attributes,
                                   string traceOutputOptions,
                                   string filter,
                                   string formatter)
     : base(sourceElement, name, traceOutputOptions, filter)
 {
     this.listenerType = listenerType;
     this.initData     = initData;
     this.attributes   = attributes;
     this.formatter    = formatter;
 }
        internal static bool SaveChanges(CustomTraceListenerSetting setting,
                                         ConfigurationElement sourceElement)
        {
            BasicCustomTraceListenerData element = (BasicCustomTraceListenerData)sourceElement;

            element.TypeName = setting.ListenerType;
            CustomDataWmiMapperHelper.UpdateAttributes(setting.Attributes, element.Attributes);
            if (element is CustomTraceListenerData)
            {
                ((CustomTraceListenerData)element).Formatter = setting.Formatter;
            }
            element.InitData           = setting.InitData;
            element.TraceOutputOptions = ParseHelper.ParseEnum <TraceOptions>(setting.TraceOutputOptions, false);
            SourceLevels filter;

            if (ParseHelper.TryParseEnum(setting.Filter, out filter))
            {
                element.Filter = filter;
            }
            return(true);
        }
        void IContainerPolicyCreator.CreatePolicies(
            IPolicyList policyList,
            string instanceName,
            ConfigurationElement configurationObject,
            IConfigurationSource configurationSource)
        {
            BasicCustomTraceListenerData castConfigurationObject = (BasicCustomTraceListenerData)configurationObject;
            string              listenerName       = castConfigurationObject.Name;
            Type                listenerType       = castConfigurationObject.Type;
            string              initData           = castConfigurationObject.InitData;
            TraceOptions        traceOutputOptions = castConfigurationObject.TraceOutputOptions;
            NameValueCollection attributes         = castConfigurationObject.Attributes;
            TraceFilter         filter             = castConfigurationObject.Filter != SourceLevels.All ? new EventTypeFilter(castConfigurationObject.Filter) : null;
            string              formatterName      = castConfigurationObject is CustomTraceListenerData
                                ? ((CustomTraceListenerData)castConfigurationObject).Formatter
                                : null;

            policyList.Set <IBuildPlanPolicy>(
                new DelegateBuildPlanPolicy(
                    context =>
            {
                TraceListener traceListener
                    = SystemDiagnosticsTraceListenerCreationHelper.CreateSystemDiagnosticsTraceListener(
                          listenerName,
                          listenerType,
                          initData,
                          attributes);
                traceListener.Name = listenerName;
                traceListener.TraceOutputOptions        = traceOutputOptions;
                traceListener.Filter                    = filter;
                CustomTraceListener customTraceListener = traceListener as CustomTraceListener;
                if (customTraceListener != null && !string.IsNullOrEmpty(formatterName))
                {
                    IBuilderContext formatterContext = context.CloneForNewBuild(NamedTypeBuildKey.Make <ILogFormatter>(formatterName), null);
                    customTraceListener.Formatter    = (ILogFormatter)formatterContext.Strategies.ExecuteBuildUp(formatterContext);
                }
                return(traceListener);
            }),
                new NamedTypeBuildKey(listenerType, instanceName));
        }