#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 System.Collections;
using log4net.Core;
namespace log4net.Appender
{
///
/// Stores logging events in an array.
///
///
///
/// The memory appender stores all the logging events
/// that are appended in an in-memory array.
///
///
/// Use the method to get
/// and clear the current list of events that have been appended.
///
///
/// Use the method to get the current
/// list of events that have been appended. Note there is a
/// race-condition when calling and
/// in pairs, you better use in that case.
///
///
/// Use the method to clear the
/// current list of events. Note there is a
/// race-condition when calling and
/// in pairs, you better use in that case.
///
///
/// Julian Biddle
/// Nicko Cadell
/// Gert Driesen
public class MemoryAppender : AppenderSkeleton
{
#region Public Instance Constructors
///
/// Initializes a new instance of the class.
///
///
///
/// Default constructor.
///
///
public MemoryAppender() : base()
{
m_eventsList = new ArrayList();
}
#endregion Protected Instance Constructors
#region Public Instance Properties
///
/// Gets the events that have been logged.
///
/// The events that have been logged
///
///
/// Gets the events that have been logged.
///
///
public virtual LoggingEvent[] GetEvents()
{
lock (m_eventsList.SyncRoot)
{
return (LoggingEvent[]) m_eventsList.ToArray(typeof(LoggingEvent));
}
}
///
/// Gets or sets a value indicating whether only part of the logging event
/// data should be fixed.
///
///
/// true if the appender should only fix part of the logging event
/// data, otherwise false. The default is false.
///
///
///
/// Setting this property to true will cause only part of the event
/// data to be fixed and stored in the appender, hereby improving performance.
///
///
/// See for more information.
///
///
[Obsolete("Use Fix property")]
public virtual bool OnlyFixPartialEventData
{
get { return (Fix == FixFlags.Partial); }
set
{
if (value)
{
Fix = FixFlags.Partial;
}
else
{
Fix = FixFlags.All;
}
}
}
///
/// Gets or sets the fields that will be fixed in the event
///
///
///
/// The logging event needs to have certain thread specific values
/// captured before it can be buffered. See
/// for details.
///
///
public virtual FixFlags Fix
{
get { return m_fixFlags; }
set { m_fixFlags = value; }
}
#endregion Public Instance Properties
#region Override implementation of AppenderSkeleton
///
/// This method is called by the method.
///
/// the event to log
///
/// Stores the in the events list.
///
protected override void Append(LoggingEvent loggingEvent)
{
// Because we are caching the LoggingEvent beyond the
// lifetime of the Append() method we must fix any
// volatile data in the event.
loggingEvent.Fix = this.Fix;
lock (m_eventsList.SyncRoot)
{
m_eventsList.Add(loggingEvent);
}
}
#endregion Override implementation of AppenderSkeleton
#region Public Instance Methods
///
/// Clear the list of events
///
///
/// Clear the list of events
///
public virtual void Clear()
{
lock (m_eventsList.SyncRoot)
{
m_eventsList.Clear();
}
}
///
/// Gets the events that have been logged and clears the list of events.
///
/// The events that have been logged
///
///
/// Gets the events that have been logged and clears the list of events.
///
///
public virtual LoggingEvent[] PopAllEvents()
{
lock (m_eventsList.SyncRoot)
{
LoggingEvent[] tmp = (LoggingEvent[]) m_eventsList.ToArray(typeof (LoggingEvent));
m_eventsList.Clear();
return tmp;
}
}
#endregion Public Instance Methods
#region Protected Instance Fields
///
/// The list of events that have been appended.
///
protected ArrayList m_eventsList;
///
/// Value indicating which fields in the event should be fixed
///
///
/// By default all fields are fixed
///
protected FixFlags m_fixFlags = FixFlags.All;
#endregion Protected Instance Fields
}
}