Beispiel #1
0
        internal static void Write(Type loggerType, TargetWithFilterChain targets, LogEventInfo logEvent, LogFactory factory)
        {
            if (targets == null)
            {
                return;
            }

#if !NETCF
            bool needTrace        = false;
            bool needTraceSources = false;

            int nst = targets.NeedsStackTrace;

            if (nst > 0)
            {
                needTrace = true;
            }
            if (nst > 1)
            {
                needTraceSources = true;
            }

            StackTrace stackTrace = null;
            if (needTrace && !logEvent.HasStackTrace)
            {
                int firstUserFrame = 0;
                stackTrace = new StackTrace(STACK_TRACE_SKIP_METHODS, needTraceSources);

                for (int i = 0; i < stackTrace.FrameCount; ++i)
                {
                    System.Reflection.MethodBase mb = stackTrace.GetFrame(i).GetMethod();

                    if (mb.DeclaringType == loggerType)
                    {
                        firstUserFrame = i + 1;
                    }
                    else
                    {
                        if (firstUserFrame != 0)
                        {
                            break;
                        }
                    }
                }
                logEvent.SetStackTrace(stackTrace, firstUserFrame);
            }
#endif
            for (TargetWithFilterChain awf = targets; awf != null; awf = awf.Next)
            {
                Target       app    = awf.Target;
                FilterResult result = FilterResult.Neutral;

                try
                {
                    FilterCollection filterChain = awf.FilterChain;

                    for (int i = 0; i < filterChain.Count; ++i)
                    {
                        Filter f = filterChain[i];
                        result = f.Check(logEvent);
                        if (result != FilterResult.Neutral)
                        {
                            break;
                        }
                    }
                    if ((result == FilterResult.Ignore) || (result == FilterResult.IgnoreFinal))
                    {
                        if (InternalLogger.IsDebugEnabled)
                        {
                            InternalLogger.Debug("{0}.{1} Rejecting message because of a filter.", logEvent.LoggerName, logEvent.Level);
                        }
                        if (result == FilterResult.IgnoreFinal)
                        {
                            return;
                        }
                        continue;
                    }
                }
                catch (Exception ex)
                {
                    InternalLogger.Error("FilterChain exception: {0}", ex);
                    if (factory.ThrowExceptions)
                    {
                        throw;
                    }
                    else
                    {
                        continue;
                    }
                }

                try
                {
                    app.Write(logEvent);
                }
                catch (Exception ex)
                {
                    InternalLogger.Error("Target exception: {0}", ex);
                    if (factory.ThrowExceptions)
                    {
                        throw;
                    }
                    else
                    {
                        continue;
                    }
                }
                if (result == FilterResult.LogFinal)
                {
                    return;
                }
            }
        }
Beispiel #2
0
 /// <summary>
 /// Adds the elements of another FilterCollection to the end of this FilterCollection.
 /// </summary>
 /// <param name="items">
 /// The FilterCollection whose elements are to be added to the end of this FilterCollection.
 /// </param>
 public virtual void AddRange(FilterCollection items)
 {
     foreach (Filter item in items)
     {
         this.List.Add(item);
     }
 }
Beispiel #3
0
 /// <summary>
 /// Initializes a new instance of the FilterCollection class, containing elements
 /// copied from another instance of FilterCollection
 /// </summary>
 /// <param name="items">
 /// The FilterCollection whose elements are to be added to the new FilterCollection.
 /// </param>
 public FilterCollection(FilterCollection items)
 {
     this.AddRange(items);
 }
Beispiel #4
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="collection"></param>
 public Enumerator(FilterCollection collection)
 {
     this.wrapped = ((System.Collections.CollectionBase)collection).GetEnumerator();
 }
Beispiel #5
0
 /// <summary>
 /// Initializes a new instance of the FilterCollection class, containing elements
 /// copied from another instance of FilterCollection
 /// </summary>
 /// <param name="items">
 /// The FilterCollection whose elements are to be added to the new FilterCollection.
 /// </param>
 public FilterCollection(FilterCollection items)
 {
     this.AddRange(items);
 }
Beispiel #6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="collection"></param>
 public Enumerator(FilterCollection collection)
 {
     this.wrapped = ((System.Collections.CollectionBase)collection).GetEnumerator();
 }