#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 /// the current list of events that have been appended. /// /// /// Use the method to clear the /// current list of events. /// /// /// 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. /// /// virtual public 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")] virtual public 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. /// /// virtual public 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. /// override protected 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 /// virtual public void Clear() { lock (m_eventsList.SyncRoot) { m_eventsList.Clear(); } } #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 } }