#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; using log4net; using log4net.Core; using log4net.Util; namespace log4net.Filter { /// /// Simple filter to match a string in the event's logger name. /// /// /// /// The works very similar to the . It admits two /// options and . If the /// of the starts /// with the value of the option, then the /// method returns in /// case the option value is set to true, /// if it is false then is returned. /// /// /// Daniel Cazzulino public class LoggerMatchFilter : FilterSkeleton { #region Member Variables /// /// Flag to indicate the behavior when we have a match /// private bool m_acceptOnMatch = true; /// /// The logger name string to substring match against the event /// private string m_loggerToMatch; #endregion #region Constructors /// /// Default constructor /// public LoggerMatchFilter() { } #endregion #region Properties /// /// when matching /// /// /// /// The property is a flag that determines /// the behavior when a matching is found. If the /// flag is set to true then the filter will the /// logging event, otherwise it will the event. /// /// /// The default is true i.e. to the event. /// /// public bool AcceptOnMatch { get { return m_acceptOnMatch; } set { m_acceptOnMatch = value; } } /// /// The that the filter will match /// /// /// /// This filter will attempt to match this value against logger name in /// the following way. The match will be done against the beginning of the /// logger name (using ). The match is /// case sensitive. If a match is found then /// the result depends on the value of . /// /// public string LoggerToMatch { get { return m_loggerToMatch; } set { m_loggerToMatch = value; } } #endregion #region Override implementation of FilterSkeleton /// /// Check if this filter should allow the event to be logged /// /// the event being logged /// see remarks /// /// /// The rendered message is matched against the . /// If the equals the beginning of /// the incoming () /// then a match will have occurred. If no match occurs /// this function will return /// allowing other filters to check the event. If a match occurs then /// the value of is checked. If it is /// true then is returned otherwise /// is returned. /// /// override public FilterDecision Decide(LoggingEvent loggingEvent) { if (loggingEvent == null) { throw new ArgumentNullException("loggingEvent"); } // Check if we have been setup to filter if ((m_loggerToMatch != null && m_loggerToMatch.Length != 0) && loggingEvent.LoggerName.StartsWith(m_loggerToMatch)) { // we've got a match if (m_acceptOnMatch) { return FilterDecision.Accept; } return FilterDecision.Deny; } else { // We cannot filter so allow the filter chain // to continue processing return FilterDecision.Neutral; } } #endregion } }