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

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

?? xmlhierarchyconfigurator.cs

?? 網上書店系統
?? CS
?? 第 1 頁 / 共 3 頁
字號:
#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 System.Collections;
using System.Globalization;
using System.Reflection;
using System.Xml;

using log4net.Appender;
using log4net.Util;
using log4net.Core;
using log4net.ObjectRenderer;

namespace log4net.Repository.Hierarchy
{
	/// <summary>
	/// Initializes the log4net environment using an XML DOM.
	/// </summary>
	/// <remarks>
	/// <para>
	/// Configures a <see cref="Hierarchy"/> using an XML DOM.
	/// </para>
	/// </remarks>
	/// <author>Nicko Cadell</author>
	/// <author>Gert Driesen</author>
	public class XmlHierarchyConfigurator
	{
		private enum ConfigUpdateMode
		{
			Merge, 
			Overwrite
		}

		#region Public Instance Constructors

		/// <summary>
		/// Construct the configurator for a hierarchy
		/// </summary>
		/// <param name="hierarchy">The hierarchy to build.</param>
		/// <remarks>
		/// <para>
		/// Initializes a new instance of the <see cref="XmlHierarchyConfigurator" /> class
		/// with the specified <see cref="Hierarchy" />.
		/// </para>
		/// </remarks>
		public XmlHierarchyConfigurator(Hierarchy hierarchy) 
		{
			m_hierarchy = hierarchy;
			m_appenderBag = new Hashtable();
		}

		#endregion Public Instance Constructors

		#region Public Instance Methods

		/// <summary>
		/// Configure the hierarchy by parsing a DOM tree of XML elements.
		/// </summary>
		/// <param name="element">The root element to parse.</param>
		/// <remarks>
		/// <para>
		/// Configure the hierarchy by parsing a DOM tree of XML elements.
		/// </para>
		/// </remarks>
		public void Configure(XmlElement element) 
		{
			if (element == null || m_hierarchy == null)
			{
				return;
			}

			string rootElementName = element.LocalName;

			if (rootElementName != CONFIGURATION_TAG)
			{
				LogLog.Error("XmlHierarchyConfigurator: Xml element is - not a <" + CONFIGURATION_TAG + "> element.");
				return;
			}

			if (!LogLog.InternalDebugging)
			{
				// Look for a debug attribute to enable internal debug
				string debugAttribute = element.GetAttribute(INTERNAL_DEBUG_ATTR);
				LogLog.Debug("XmlHierarchyConfigurator: "+INTERNAL_DEBUG_ATTR+" attribute [" + debugAttribute + "].");

				if (debugAttribute.Length>0 && debugAttribute != "null") 
				{	  
					LogLog.InternalDebugging = OptionConverter.ToBoolean(debugAttribute, true);
				}
				else 
				{
					LogLog.Debug("XmlHierarchyConfigurator: Ignoring " + INTERNAL_DEBUG_ATTR + " attribute.");
				}

				string confDebug = element.GetAttribute(CONFIG_DEBUG_ATTR);
				if (confDebug.Length>0 && confDebug != "null")
				{	  
					LogLog.Warn("XmlHierarchyConfigurator: The \"" + CONFIG_DEBUG_ATTR + "\" attribute is deprecated.");
					LogLog.Warn("XmlHierarchyConfigurator: Use the \"" + INTERNAL_DEBUG_ATTR + "\" attribute instead.");
					LogLog.InternalDebugging = OptionConverter.ToBoolean(confDebug, true);
				}
			}

			// Default mode is merge
			ConfigUpdateMode configUpdateMode = ConfigUpdateMode.Merge;

			// Look for the config update attribute
			string configUpdateModeAttribute = element.GetAttribute(CONFIG_UPDATE_MODE_ATTR);
			if (configUpdateModeAttribute != null && configUpdateModeAttribute.Length > 0)
			{
				// Parse the attribute
				try
				{
					configUpdateMode = (ConfigUpdateMode)OptionConverter.ConvertStringTo(typeof(ConfigUpdateMode), configUpdateModeAttribute);
				}
				catch
				{
					LogLog.Error("XmlHierarchyConfigurator: Invalid " + CONFIG_UPDATE_MODE_ATTR + " attribute value [" + configUpdateModeAttribute + "]");
				}
			}

			// IMPL: The IFormatProvider argument to Enum.ToString() is deprecated in .NET 2.0
			LogLog.Debug("XmlHierarchyConfigurator: Configuration update mode [" + configUpdateMode.ToString() + "].");

			// Only reset configuration if overwrite flag specified
			if (configUpdateMode == ConfigUpdateMode.Overwrite)
			{
				// Reset to original unset configuration
				m_hierarchy.ResetConfiguration();
				LogLog.Debug("XmlHierarchyConfigurator: Configuration reset before reading config.");
			}

			/* Building Appender objects, placing them in a local namespace
			   for future reference */

			/* Process all the top level elements */

			foreach (XmlNode currentNode in element.ChildNodes)
			{
				if (currentNode.NodeType == XmlNodeType.Element) 
				{
					XmlElement currentElement = (XmlElement)currentNode;

					if (currentElement.LocalName == LOGGER_TAG)
					{
						ParseLogger(currentElement);
					} 
					else if (currentElement.LocalName == CATEGORY_TAG)
					{
						// TODO: deprecated use of category
						ParseLogger(currentElement);
					} 
					else if (currentElement.LocalName == ROOT_TAG)
					{
						ParseRoot(currentElement);
					} 
					else if (currentElement.LocalName == RENDERER_TAG)
					{
						ParseRenderer(currentElement);
					}
					else if (currentElement.LocalName == APPENDER_TAG)
					{
						// We ignore appenders in this pass. They will
						// be found and loaded if they are referenced.
					}
					else
					{
						// Read the param tags and set properties on the hierarchy
						SetParameter(currentElement, m_hierarchy);
					}
				}
			}

			// Lastly set the hierarchy threshold
			string thresholdStr = element.GetAttribute(THRESHOLD_ATTR);
			LogLog.Debug("XmlHierarchyConfigurator: Hierarchy Threshold [" + thresholdStr + "]");
			if (thresholdStr.Length > 0 && thresholdStr != "null") 
			{
				Level thresholdLevel = (Level) ConvertStringTo(typeof(Level), thresholdStr);
				if (thresholdLevel != null)
				{
					m_hierarchy.Threshold = thresholdLevel;
				}
				else
				{
					LogLog.Warn("XmlHierarchyConfigurator: Unable to set hierarchy threshold using value [" + thresholdStr + "] (with acceptable conversion types)");
				}
			}

			// Done reading config
		}

		#endregion Public Instance Methods

		#region Protected Instance Methods

		/// <summary>
		/// Parse appenders by IDREF.
		/// </summary>
		/// <param name="appenderRef">The appender ref element.</param>
		/// <returns>The instance of the appender that the ref refers to.</returns>
		/// <remarks>
		/// <para>
		/// Parse an XML element that represents an appender and return 
		/// the appender.
		/// </para>
		/// </remarks>
		protected IAppender FindAppenderByReference(XmlElement appenderRef) 
		{	
			string appenderName = appenderRef.GetAttribute(REF_ATTR);

			IAppender appender = (IAppender)m_appenderBag[appenderName];
			if (appender != null) 
			{
				return appender;
			} 
			else 
			{
				// Find the element with that id
				XmlElement element = null;

				if (appenderName != null && appenderName.Length > 0)
				{
					foreach (XmlElement curAppenderElement in appenderRef.OwnerDocument.GetElementsByTagName(APPENDER_TAG))
					{
						if (curAppenderElement.GetAttribute("name") == appenderName)
						{
							element = curAppenderElement;
							break;
						}
					}
				}

				if (element == null) 
				{
					LogLog.Error("XmlHierarchyConfigurator: No appender named [" + appenderName + "] could be found."); 
					return null;
				} 
				else
				{
					appender = ParseAppender(element);
					if (appender != null)
					{
						m_appenderBag[appenderName] = appender;
					}
					return appender;
				}
			} 
		}

		/// <summary>
		/// Parses an appender element.
		/// </summary>
		/// <param name="appenderElement">The appender element.</param>
		/// <returns>The appender instance or <c>null</c> when parsing failed.</returns>
		/// <remarks>
		/// <para>
		/// Parse an XML element that represents an appender and return
		/// the appender instance.
		/// </para>
		/// </remarks>
		protected IAppender ParseAppender(XmlElement appenderElement) 
		{
			string appenderName = appenderElement.GetAttribute(NAME_ATTR);
			string typeName = appenderElement.GetAttribute(TYPE_ATTR);

			LogLog.Debug("XmlHierarchyConfigurator: Loading Appender [" + appenderName + "] type: [" + typeName + "]");
			try 
			{
				IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));
				appender.Name = appenderName;

				foreach (XmlNode currentNode in appenderElement.ChildNodes)
				{
					/* We're only interested in Elements */
					if (currentNode.NodeType == XmlNodeType.Element) 
					{
						XmlElement currentElement = (XmlElement)currentNode;

						// Look for the appender ref tag
						if (currentElement.LocalName == APPENDER_REF_TAG)
						{
							string refName = currentElement.GetAttribute(REF_ATTR);

							IAppenderAttachable appenderContainer = appender as IAppenderAttachable;
							if (appenderContainer != null) 
							{
								LogLog.Debug("XmlHierarchyConfigurator: Attaching appender named [" + refName + "] to appender named [" + appender.Name + "].");

								IAppender referencedAppender = FindAppenderByReference(currentElement);
								if (referencedAppender != null)
								{
									appenderContainer.AddAppender(referencedAppender);
								}
							} 
							else 
							{
								LogLog.Error("XmlHierarchyConfigurator: Requesting attachment of appender named ["+refName+ "] to appender named [" + appender.Name + "] which does not implement log4net.Core.IAppenderAttachable.");
							}
						}
						else
						{
							// For all other tags we use standard set param method
							SetParameter(currentElement, appender);
						}
					}
				}

				IOptionHandler optionHandler = appender as IOptionHandler;
				if (optionHandler != null) 
				{
					optionHandler.ActivateOptions();
				}

				LogLog.Debug("XmlHierarchyConfigurator: Created Appender [" + appenderName + "]");	
				return appender;
			}
			catch (Exception ex) 
			{
				// Yes, it's ugly.  But all exceptions point to the same problem: we can't create an Appender

				LogLog.Error("XmlHierarchyConfigurator: Could not create Appender [" + appenderName + "] of type [" + typeName + "]. Reported error follows.", ex);
				return null;
			}
		}

		/// <summary>
		/// Parses a logger element.
		/// </summary>
		/// <param name="loggerElement">The logger element.</param>
		/// <remarks>
		/// <para>
		/// Parse an XML element that represents a logger.
		/// </para>
		/// </remarks>
		protected void ParseLogger(XmlElement loggerElement) 
		{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产a精品视频| 久久久久国产精品麻豆| 久久综合九色综合97婷婷女人| 中文字幕亚洲在| 麻豆91免费看| 色94色欧美sute亚洲线路一久| 精品人在线二区三区| 亚洲一卡二卡三卡四卡五卡| 国产不卡在线视频| 日韩精品一区二区三区老鸭窝| 亚洲一二三四在线| 91丨九色丨黑人外教| 久久精品人人做人人综合 | 日韩欧美中文字幕一区| 亚洲猫色日本管| 顶级嫩模精品视频在线看| 日韩欧美一级精品久久| 亚洲一级二级在线| 91福利社在线观看| 亚洲免费av高清| 99re66热这里只有精品3直播 | 亚洲一二三级电影| 99国产欧美另类久久久精品| 国产亚洲一区二区三区在线观看| 琪琪一区二区三区| 欧美日韩国产免费一区二区| 一个色综合av| 在线观看视频欧美| 亚洲一区二区四区蜜桃| 91网站黄www| 亚洲精品久久久蜜桃| 色综合天天综合网天天狠天天 | 色乱码一区二区三区88| 最好看的中文字幕久久| av亚洲精华国产精华精华| 亚洲欧洲av在线| 色综合天天综合给合国产| 亚洲精品一二三区| 欧美熟乱第一页| 偷拍日韩校园综合在线| 欧美一区二区三区免费大片| 青青草97国产精品免费观看| 日韩欧美色综合网站| 久久 天天综合| 国产精品色哟哟网站| 91麻豆国产在线观看| 亚洲国产精品精华液网站| 欧美日韩激情在线| 蜜臀av一级做a爰片久久| 精品处破学生在线二十三| 国产精品1区2区3区| 国产精品色噜噜| 欧美色欧美亚洲另类二区| 日韩av电影天堂| 26uuu久久天堂性欧美| 99国产精品久久久久| 亚洲第一福利视频在线| 精品日韩一区二区| 一本一道久久a久久精品综合蜜臀| 亚洲超碰精品一区二区| 精品伦理精品一区| 99精品视频在线观看| 午夜婷婷国产麻豆精品| 精品久久人人做人人爱| 一本到一区二区三区| 日本女人一区二区三区| 亚洲国产精品成人综合色在线婷婷| 欧美中文字幕一二三区视频| 久久99热这里只有精品| 亚洲欧洲综合另类| 欧美成人艳星乳罩| 在线精品视频免费观看| 国产成人在线免费| 午夜欧美大尺度福利影院在线看| 国产欧美一区二区三区在线老狼| 欧美影院一区二区三区| 国产乱子伦视频一区二区三区| 亚洲成人先锋电影| 国产精品国产三级国产| 日韩精品中文字幕一区| 色综合视频在线观看| 国内精品不卡在线| 午夜精品一区在线观看| 国产精品蜜臀在线观看| 欧美成人一区二区三区片免费 | 91麻豆成人久久精品二区三区| 日韩av电影免费观看高清完整版 | 激情文学综合网| 亚洲一卡二卡三卡四卡 | 精品国产91洋老外米糕| 色呦呦一区二区三区| 国产精品资源站在线| 日本网站在线观看一区二区三区| 亚洲日本免费电影| 久久看人人爽人人| 日韩一区二区在线免费观看| 91久久国产最好的精华液| 丰满亚洲少妇av| 国产在线视频精品一区| 日韩精品成人一区二区三区| 亚洲精品视频在线| 中文字幕日韩av资源站| 国产午夜精品福利| 精品1区2区在线观看| 日韩久久免费av| 欧美一区二区在线看| 欧美综合一区二区三区| 色综合久久久久久久久久久| av不卡免费电影| 99综合电影在线视频| www.日韩在线| 91视频观看视频| 91在线云播放| 在线视频综合导航| 精品1区2区3区| 欧美剧情片在线观看| 欧美亚洲国产bt| 91精选在线观看| 欧美电影免费观看完整版| 精品88久久久久88久久久| 国产亚洲成年网址在线观看| 欧美精品一区二区三区四区| 精品日韩一区二区三区| 久久亚洲影视婷婷| 国产欧美精品一区二区三区四区| 久久精品一区二区| 最新久久zyz资源站| 亚洲美女在线国产| 亚洲福利视频一区| 日韩精品国产欧美| 国产精品自拍网站| 色综合网站在线| 欧美一三区三区四区免费在线看 | 亚洲精品成a人| 亚洲韩国精品一区| 精品在线免费观看| 国产精品乡下勾搭老头1| 91片在线免费观看| 777色狠狠一区二区三区| 欧美成人精品高清在线播放| 欧美激情在线观看视频免费| 亚洲欧洲综合另类| 玖玖九九国产精品| 风流少妇一区二区| 欧美日韩在线播放一区| 精品人在线二区三区| 亚洲欧美一区二区久久| 日本成人在线看| 成人在线一区二区三区| 欧美丝袜丝交足nylons| 久久亚洲春色中文字幕久久久| 国产精品女主播在线观看| 五月天亚洲精品| 国产成人午夜片在线观看高清观看| 日本韩国一区二区| 精品国产91九色蝌蚪| 亚洲色图制服丝袜| 国产综合色在线| 欧美色图片你懂的| 国产视频一区二区在线观看| 亚洲国产cao| eeuss鲁一区二区三区| 日韩西西人体444www| 国产精品丝袜一区| 精品在线你懂的| 欧美日韩亚洲综合在线 | 精品成人私密视频| 一区二区三区丝袜| 国产中文字幕精品| 欧美疯狂性受xxxxx喷水图片| 国产精品久久福利| 精品一区二区精品| 欧美日本韩国一区二区三区视频| 国产精品久久久久aaaa樱花 | 精品欧美乱码久久久久久| 亚洲精品伦理在线| 国产精品主播直播| 日韩亚洲欧美高清| 亚洲成a人片在线观看中文| 99久久精品国产观看| 国产视频视频一区| 黑人精品欧美一区二区蜜桃 | 色先锋资源久久综合| 五月婷婷久久综合| 91麻豆高清视频| 国产精品久久久久aaaa樱花| 国产成人在线免费观看| 久久中文娱乐网| 久久精品久久99精品久久| 日韩午夜激情av| 青青草成人在线观看| 欧美高清视频不卡网| 亚欧色一区w666天堂| 欧美日韩一区二区三区免费看| 亚洲色欲色欲www| 色哟哟精品一区| 一区二区三区美女| 欧美色图12p| 天堂av在线一区| 日韩欧美国产精品一区|