#region Copyright & License
//
// Copyright 2001-2005 The Apache Software Foundation
//
// Licensed 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
}
}