亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? appenderattachedimpl.cs

?? 詳細講述了數據庫編程
?? CS
字號:
#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.Core;
using log4net.Appender;

namespace log4net.Util
{
	/// <summary>
	/// A straightforward implementation of the <see cref="IAppenderAttachable"/> interface.
	/// </summary>
	/// <remarks>
	/// <para>
	/// This is the default implementation of the <see cref="IAppenderAttachable"/>
	/// interface. Implementors of the <see cref="IAppenderAttachable"/> interface
	/// should aggregate an instance of this type.
	/// </para>
	/// </remarks>
	/// <author>Nicko Cadell</author>
	/// <author>Gert Driesen</author>
	public class AppenderAttachedImpl : IAppenderAttachable
	{
		#region Public Instance Constructors

		/// <summary>
		/// Constructor
		/// </summary>
		/// <remarks>
		/// <para>
		/// Initializes a new instance of the <see cref="AppenderAttachedImpl"/> class.
		/// </para>
		/// </remarks>
		public AppenderAttachedImpl()
		{
		}

		#endregion Public Instance Constructors

		#region Public Instance Methods

		/// <summary>
		/// Append on on all attached appenders.
		/// </summary>
		/// <param name="loggingEvent">The event being logged.</param>
		/// <returns>The number of appenders called.</returns>
		/// <remarks>
		/// <para>
		/// Calls the <see cref="IAppender.DoAppend" /> method on all 
		/// attached appenders.
		/// </para>
		/// </remarks>
		public int AppendLoopOnAppenders(LoggingEvent loggingEvent) 
		{
			if (loggingEvent == null)
			{
				throw new ArgumentNullException("loggingEvent");
			}

			// m_appenderList is null when empty
			if (m_appenderList == null) 
			{
				return 0;
			}

			if (m_appenderArray == null)
			{
				m_appenderArray = m_appenderList.ToArray();
			}

			foreach(IAppender appender in m_appenderArray)
			{
				try
				{
					appender.DoAppend(loggingEvent);
				}
				catch(Exception ex)
				{
					LogLog.Error("AppenderAttachedImpl: Failed to append to appender [" + appender.Name + "]", ex);
				}
			}
			return m_appenderList.Count;
		}

		/// <summary>
		/// Append on on all attached appenders.
		/// </summary>
		/// <param name="loggingEvents">The array of events being logged.</param>
		/// <returns>The number of appenders called.</returns>
		/// <remarks>
		/// <para>
		/// Calls the <see cref="IAppender.DoAppend" /> method on all 
		/// attached appenders.
		/// </para>
		/// </remarks>
		public int AppendLoopOnAppenders(LoggingEvent[] loggingEvents) 
		{
			if (loggingEvents == null)
			{
				throw new ArgumentNullException("loggingEvents");
			}
			if (loggingEvents.Length == 0)
			{
				throw new ArgumentException("loggingEvents array must not be empty", "loggingEvents");
			}
			if (loggingEvents.Length == 1)
			{
				// Fall back to single event path
				return AppendLoopOnAppenders(loggingEvents[0]);
			}

			// m_appenderList is null when empty
			if (m_appenderList == null) 
			{
				return 0;
			}

			if (m_appenderArray == null)
			{
				m_appenderArray = m_appenderList.ToArray();
			}

			foreach(IAppender appender in m_appenderArray)
			{
				try
				{
					CallAppend(appender, loggingEvents);
				}
				catch(Exception ex)
				{
					LogLog.Error("AppenderAttachedImpl: Failed to append to appender [" + appender.Name + "]", ex);
				}
			}
			return m_appenderList.Count;
		}

		#endregion Public Instance Methods

		/// <summary>
		/// Calls the DoAppende method on the <see cref="IAppender"/> with 
		/// the <see cref="LoggingEvent"/> objects supplied.
		/// </summary>
		/// <param name="appender">The appender</param>
		/// <param name="loggingEvents">The events</param>
		/// <remarks>
		/// <para>
		/// If the <paramref name="appender" /> supports the <see cref="IBulkAppender"/>
		/// interface then the <paramref name="loggingEvents" /> will be passed 
		/// through using that interface. Otherwise the <see cref="LoggingEvent"/>
		/// objects in the array will be passed one at a time.
		/// </para>
		/// </remarks>
		private static void CallAppend(IAppender appender, LoggingEvent[] loggingEvents)
		{
			IBulkAppender bulkAppender = appender as IBulkAppender;
			if (bulkAppender != null)
			{
				bulkAppender.DoAppend(loggingEvents);
			}
			else
			{
				foreach(LoggingEvent loggingEvent in loggingEvents)
				{
					appender.DoAppend(loggingEvent);
				}
			}
		}

		#region Implementation of IAppenderAttachable

		/// <summary>
		/// Attaches an appender.
		/// </summary>
		/// <param name="newAppender">The appender to add.</param>
		/// <remarks>
		/// <para>
		/// If the appender is already in the list it won't be added again.
		/// </para>
		/// </remarks>
		public void AddAppender(IAppender newAppender) 
		{
			// Null values for newAppender parameter are strictly forbidden.
			if (newAppender == null)
			{
				throw new ArgumentNullException("newAppender");
			}
	
			m_appenderArray = null;
			if (m_appenderList == null) 
			{
				m_appenderList = new AppenderCollection(1);
			}
			if (!m_appenderList.Contains(newAppender))
			{
				m_appenderList.Add(newAppender);
			}
		}

		/// <summary>
		/// Gets all attached appenders.
		/// </summary>
		/// <returns>
		/// A collection of attached appenders, or <c>null</c> if there
		/// are no attached appenders.
		/// </returns>
		/// <remarks>
		/// <para>
		/// The read only collection of all currently attached appenders.
		/// </para>
		/// </remarks>
		public AppenderCollection Appenders 
		{
			get
			{
				if (m_appenderList == null)
				{
					// We must always return a valid collection
					return AppenderCollection.EmptyCollection;
				}
				else 
				{
					return AppenderCollection.ReadOnly(m_appenderList);
				}
			}
		}

		/// <summary>
		/// Gets an attached appender with the specified name.
		/// </summary>
		/// <param name="name">The name of the appender to get.</param>
		/// <returns>
		/// The appender with the name specified, or <c>null</c> if no appender with the
		/// specified name is found.
		/// </returns>
		/// <remarks>
		/// <para>
		/// Lookup an attached appender by name.
		/// </para>
		/// </remarks>
		public IAppender GetAppender(string name) 
		{
			if (m_appenderList != null && name != null)
			{
				foreach(IAppender appender in m_appenderList)
				{
					if (name == appender.Name)
					{
						return appender;
					}
				}
			}
			return null;   
		}

		/// <summary>
		/// Removes all attached appenders.
		/// </summary>
		/// <remarks>
		/// <para>
		/// Removes and closes all attached appenders
		/// </para>
		/// </remarks>
		public void RemoveAllAppenders() 
		{
			if (m_appenderList != null) 
			{
				foreach(IAppender appender in m_appenderList)
				{
					try
					{
						appender.Close();
					}
					catch(Exception ex)
					{
						LogLog.Error("AppenderAttachedImpl: Failed to Close appender ["+appender.Name+"]", ex);
					}
				}
				m_appenderList = null;	  
				m_appenderArray = null;
			}
		}

		/// <summary>
		/// Removes the specified appender from the list of attached appenders.
		/// </summary>
		/// <param name="appender">The appender to remove.</param>
		/// <returns>The appender removed from the list</returns>
		/// <remarks>
		/// <para>
		/// The appender removed is not closed.
		/// If you are discarding the appender you must call
		/// <see cref="IAppender.Close"/> on the appender removed.
		/// </para>
		/// </remarks>
		public IAppender RemoveAppender(IAppender appender) 
		{
			if (appender != null && m_appenderList != null) 
			{
				m_appenderList.Remove(appender);
				if (m_appenderList.Count == 0)
				{
					m_appenderList = null;
				}
				m_appenderArray = null;
			}
			return appender;
		}

		/// <summary>
		/// Removes the appender with the specified name from the list of appenders.
		/// </summary>
		/// <param name="name">The name of the appender to remove.</param>
		/// <returns>The appender removed from the list</returns>
		/// <remarks>
		/// <para>
		/// The appender removed is not closed.
		/// If you are discarding the appender you must call
		/// <see cref="IAppender.Close"/> on the appender removed.
		/// </para>
		/// </remarks>
		public IAppender RemoveAppender(string name) 
		{
			return RemoveAppender(GetAppender(name));
		}

		#endregion

		#region Private Instance Fields

		/// <summary>
		/// List of appenders
		/// </summary>
		private AppenderCollection m_appenderList;

		/// <summary>
		/// Array of appenders, used to cache the m_appenderList
		/// </summary>
		private IAppender[] m_appenderArray;

		#endregion Private Instance Fields
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲另类在线视频| 欧美v日韩v国产v| 7777精品伊人久久久大香线蕉 | 国产欧美日韩亚州综合| 亚洲欧洲精品一区二区三区| 亚洲不卡av一区二区三区| 激情亚洲综合在线| 99re视频这里只有精品| 91精品国产入口| 国产欧美一区二区精品仙草咪| 亚洲日本va在线观看| 麻豆成人av在线| av在线一区二区| 日韩女优视频免费观看| 亚洲欧洲一区二区在线播放| 日韩电影免费在线观看网站| 国产福利一区二区三区视频| 欧美影院一区二区三区| 久久蜜桃一区二区| 亚洲国产精品久久久久秋霞影院| 国产麻豆精品久久一二三| 欧美性色黄大片手机版| 国产欧美1区2区3区| 首页欧美精品中文字幕| 成人高清av在线| 欧美电视剧免费观看| 亚洲欧美乱综合| 国产在线麻豆精品观看| 欧美日韩在线精品一区二区三区激情| 久久久影视传媒| 日韩高清不卡在线| 色婷婷av一区二区三区软件| 久久九九国产精品| 日本在线观看不卡视频| 欧美亚洲国产怡红院影院| 久久综合国产精品| 五月激情综合婷婷| 色噜噜狠狠成人中文综合| 国产亚洲欧美在线| 久久av中文字幕片| 欧美夫妻性生活| 亚洲黄一区二区三区| 国产suv一区二区三区88区| 91精品国产91久久综合桃花| 亚洲人成影院在线观看| 国产成人精品一区二区三区四区| 91麻豆精品国产无毒不卡在线观看| 亚洲视频综合在线| 国产精品99久久久久| 在线不卡的av| 亚洲激情一二三区| 色综合夜色一区| 一区二区三区小说| 69堂成人精品免费视频| 婷婷丁香激情综合| 91精品国产综合久久久久久久久久| 一卡二卡欧美日韩| 97精品电影院| 精品国产一区二区三区忘忧草 | 国产真实乱偷精品视频免| 中文字幕一区二区三区在线观看| 成人久久视频在线观看| 一区二区三区中文免费| 日韩一区二区精品在线观看| 国产精品888| 亚洲国产视频直播| 中文在线免费一区三区高中清不卡| 欧美日韩精品一区二区三区四区| 国内成人免费视频| 中文字幕一区日韩精品欧美| 91视视频在线直接观看在线看网页在线看| 中文字幕欧美激情| 国产精品美女久久久久久久久 | 国产不卡高清在线观看视频| 久久综合色8888| 韩国v欧美v日本v亚洲v| 久久网站最新地址| 国内成+人亚洲+欧美+综合在线| 欧美精品一区二区三区在线播放 | 精品国产乱码久久久久久影片| 日本美女一区二区三区视频| 欧美一区二区三区四区久久| 奇米影视一区二区三区小说| 91精品国产入口在线| 极品销魂美女一区二区三区| 久久这里只精品最新地址| 国产成人av电影在线| 中文字幕永久在线不卡| 欧美亚洲禁片免费| 美腿丝袜一区二区三区| 日韩欧美不卡在线观看视频| 国产乱子伦视频一区二区三区| 欧美激情一区二区三区| 91社区在线播放| 亚洲一区二区三区四区五区中文 | 五月天精品一区二区三区| 日韩色视频在线观看| 国产一区二区三区日韩| 亚洲国产经典视频| 在线观看网站黄不卡| 天堂久久一区二区三区| 精品福利在线导航| 99在线精品一区二区三区| 一卡二卡欧美日韩| 精品久久人人做人人爰| 成人禁用看黄a在线| 亚洲午夜久久久久| 日韩精品影音先锋| 99视频精品在线| 日韩av电影免费观看高清完整版| 久久五月婷婷丁香社区| 91麻豆国产精品久久| 欧美午夜精品一区二区蜜桃| 欧美老肥妇做.爰bbww| 亚洲三级在线免费| 91精品国产一区二区| 成人性生交大片免费看中文网站| 亚洲最新视频在线观看| 视频一区中文字幕国产| 精品国产区一区| 日本韩国视频一区二区| 激情成人综合网| 亚洲激情网站免费观看| 精品国产91久久久久久久妲己| 一本到高清视频免费精品| 麻豆精品在线看| 亚洲狼人国产精品| 久久综合成人精品亚洲另类欧美| 91久久线看在观草草青青| 国产在线精品一区二区 | 91在线国产观看| 久久精品国产亚洲a| 一二三区精品视频| 国产婷婷色一区二区三区在线| 欧美日韩一区二区电影| 国产成人精品免费视频网站| 日韩成人午夜电影| 亚洲三级理论片| 国产亚洲福利社区一区| 欧美精选午夜久久久乱码6080| 成人av网站在线观看| 卡一卡二国产精品| 亚洲一区二区三区激情| 国产精品视频在线看| 欧美成人三级在线| 欧美日韩精品是欧美日韩精品| 成+人+亚洲+综合天堂| 精品亚洲免费视频| 视频一区中文字幕国产| 亚洲综合成人在线| 中文字幕一区二区三区av| 精品黑人一区二区三区久久| 欧美日韩高清影院| 色婷婷狠狠综合| jizzjizzjizz欧美| 国产精品一区免费在线观看| 日本成人在线看| 亚洲第一福利视频在线| 亚洲欧美色一区| 中文字幕在线一区免费| 久久久国际精品| 日韩久久久精品| 欧美一级理论片| 91精品国产综合久久精品麻豆| 在线免费不卡视频| 色综合天天视频在线观看| av午夜精品一区二区三区| 懂色一区二区三区免费观看| 国产一区二区美女诱惑| 久久99深爱久久99精品| 日本欧美一区二区在线观看| 亚洲成av人在线观看| 亚洲成人免费在线| 亚洲成人av免费| 亚洲成人动漫一区| 亚洲第一会所有码转帖| 无码av中文一区二区三区桃花岛| 亚洲国产欧美日韩另类综合| 一区二区三区美女| 亚洲国产精品一区二区www在线| 亚洲美女区一区| 一区二区三区日韩欧美| 国产福利精品导航| 91天堂素人约啪| 亚洲成av人片观看| 亚洲制服丝袜一区| 亚洲一区二区三区四区在线免费观看 | 国产三区在线成人av| 精品99999| 国产喂奶挤奶一区二区三区| 久久亚洲综合av| 中文字幕不卡一区| 国产精品久久久久影视| 国产精品福利电影一区二区三区四区| 亚洲欧美综合色| 亚洲成a人v欧美综合天堂下载 | 欧美日韩视频不卡| 4438x成人网最大色成网站| 日韩小视频在线观看专区| 欧美不卡一区二区|