#region Apache License // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to you under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #endregion using System; namespace log4net.Core { /// /// An evaluator that triggers on an Exception type /// /// /// /// This evaluator will trigger if the type of the Exception /// passed to /// is equal to a Type in . /// /// /// /// Drew Schaeffer public class ExceptionEvaluator : ITriggeringEventEvaluator { /// /// The type that causes the trigger to fire. /// private Type m_type; /// /// Causes subclasses of to cause the trigger to fire. /// private bool m_triggerOnSubclass; /// /// Default ctor to allow dynamic creation through a configurator. /// public ExceptionEvaluator() { // empty } /// /// Constructs an evaluator and initializes to trigger on /// /// the type that triggers this evaluator. /// If true, this evaluator will trigger on subclasses of . public ExceptionEvaluator(Type exType, bool triggerOnSubClass) { if (exType == null) { throw new ArgumentNullException("exType"); } m_type = exType; m_triggerOnSubclass = triggerOnSubClass; } /// /// The type that triggers this evaluator. /// public Type ExceptionType { get { return m_type; } set { m_type = value; } } /// /// If true, this evaluator will trigger on subclasses of . /// public bool TriggerOnSubclass { get { return m_triggerOnSubclass; } set { m_triggerOnSubclass = value; } } #region ITriggeringEventEvaluator Members /// /// Is this the triggering event? /// /// The event to check /// This method returns true, if the logging event Exception /// Type is . /// Otherwise it returns false /// /// /// This evaluator will trigger if the Exception Type of the event /// passed to /// is . /// /// public bool IsTriggeringEvent(LoggingEvent loggingEvent) { if (loggingEvent == null) { throw new ArgumentNullException("loggingEvent"); } if (m_triggerOnSubclass && loggingEvent.ExceptionObject != null) { // check if loggingEvent.ExceptionObject is of type ExceptionType or subclass of ExceptionType Type exceptionObjectType = loggingEvent.ExceptionObject.GetType(); return exceptionObjectType == m_type || exceptionObjectType.IsSubclassOf(m_type); } else if (!m_triggerOnSubclass && loggingEvent.ExceptionObject != null) { // check if loggingEvent.ExceptionObject is of type ExceptionType return loggingEvent.ExceptionObject.GetType() == m_type; } else { // loggingEvent.ExceptionObject is null return false; } } #endregion } }