public ConditionMethodExpression(string name, ConditionExpressionCollection parameters)
        {
            _name       = name;
            _parameters = parameters;

            _methodInfo = ConditionMethodFactory.CreateConditionMethod(_name);
            if (_methodInfo == null)
            {
                Internal.InternalLogger.Error("Condition method: '{0}' not found", name);
                throw new ArgumentException("Condition method not found: '" + name + "'");
            }
            ParameterInfo[] formalParameters = _methodInfo.GetParameters();
            if (formalParameters.Length >= 0)
            {
                _acceptsLogEvent = (formalParameters[0].ParameterType == typeof(LogEventInfo));
            }
            else
            {
                _acceptsLogEvent = false;
            }

            int actualParameterCount = _parameters.Count;

            if (_acceptsLogEvent)
            {
                actualParameterCount++;
            }
            if (formalParameters.Length != actualParameterCount)
            {
                Internal.InternalLogger.Error("Condition method: '{0}' expects {1} parameters. Passed {2}", name, formalParameters.Length, actualParameterCount);
                throw new ConditionParseException(String.Format("Condition method: '{0}' expects {1} parameters. Passed {2}", name, formalParameters.Length, actualParameterCount));
            }
        }
示例#2
0
        private void AddExtensionsFromElement(XmlElement element, string baseDirectory)
        {
            if (element == null)
            {
                return;
            }

            foreach (XmlElement targetElement in PropertyHelper.GetChildElements(element))
            {
                if (EqualsCI(targetElement.LocalName, "add"))
                {
                    string assemblyFile = GetCaseInsensitiveAttribute(targetElement, "assemblyFile");
                    string extPrefix    = GetCaseInsensitiveAttribute(targetElement, "prefix");
                    string prefix;
                    if (extPrefix != null && extPrefix.Length != 0)
                    {
                        prefix = extPrefix + ".";
                    }
                    else
                    {
                        prefix = String.Empty;
                    }

                    if (assemblyFile != null && assemblyFile.Length > 0)
                    {
                        try
                        {
                            string fullFileName = Path.Combine(baseDirectory, assemblyFile);
                            InternalLogger.Info("Loading assemblyFile: {0}", fullFileName);
                            Assembly asm = Assembly.LoadFrom(fullFileName);

                            TargetFactory.AddTargetsFromAssembly(asm, prefix);
                            LayoutRendererFactory.AddLayoutRenderersFromAssembly(asm, prefix);
                            FilterFactory.AddFiltersFromAssembly(asm, prefix);
                            LayoutFactory.AddLayoutsFromAssembly(asm, prefix);
                            ConditionMethodFactory.AddConditionMethodsFromAssembly(asm, prefix);
                        }
                        catch (Exception ex)
                        {
                            InternalLogger.Error("Error loading extensions: {0}", ex);
                            if (LogManager.ThrowExceptions)
                            {
                                throw new NLogConfigurationException("Error loading extensions: " + assemblyFile, ex);
                            }
                        }
                        continue;
                    }
                    ;

                    string assemblyName = GetCaseInsensitiveAttribute(targetElement, "assembly");

                    if (assemblyName != null && assemblyName.Length > 0)
                    {
                        try
                        {
                            InternalLogger.Info("Loading assemblyName: {0}", assemblyName);
                            Assembly asm = Assembly.Load(assemblyName);

                            TargetFactory.AddTargetsFromAssembly(asm, prefix);
                            LayoutRendererFactory.AddLayoutRenderersFromAssembly(asm, prefix);
                            FilterFactory.AddFiltersFromAssembly(asm, prefix);
                            LayoutFactory.AddLayoutsFromAssembly(asm, prefix);
                            ConditionMethodFactory.AddConditionMethodsFromAssembly(asm, prefix);
                        }
                        catch (Exception ex)
                        {
                            InternalLogger.Error("Error loading extensions: {0}", ex);
                            if (LogManager.ThrowExceptions)
                            {
                                throw new NLogConfigurationException("Error loading extensions: " + assemblyName, ex);
                            }
                        }
                        continue;
                    }
                    ;
                }
            }
        }