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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? patternlayout.cs

?? 詳細(xì)講述了數(shù)據(jù)庫(kù)編程
?? CS
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
  
		/// <summary>
		/// the head of the pattern converter chain
		/// </summary>
		private PatternConverter m_head;

		/// <summary>
		/// patterns defined on this PatternLayout only
		/// </summary>
		private Hashtable m_instanceRulesRegistry = new Hashtable();

		#endregion

		#region Static Constructor

		/// <summary>
		/// Initialize the global registry
		/// </summary>
		/// <remarks>
		/// <para>
		/// Defines the builtin global rules.
		/// </para>
		/// </remarks>
		static PatternLayout()
		{
			s_globalRulesRegistry = new Hashtable(45);

			s_globalRulesRegistry.Add("literal", typeof(log4net.Util.PatternStringConverters.LiteralPatternConverter));
			s_globalRulesRegistry.Add("newline", typeof(log4net.Util.PatternStringConverters.NewLinePatternConverter));
			s_globalRulesRegistry.Add("n", typeof(log4net.Util.PatternStringConverters.NewLinePatternConverter));

			s_globalRulesRegistry.Add("c", typeof(LoggerPatternConverter));
			s_globalRulesRegistry.Add("logger", typeof(LoggerPatternConverter));

			s_globalRulesRegistry.Add("C", typeof(TypeNamePatternConverter));
			s_globalRulesRegistry.Add("class", typeof(TypeNamePatternConverter));
			s_globalRulesRegistry.Add("type", typeof(TypeNamePatternConverter));

			s_globalRulesRegistry.Add("d", typeof(DatePatternConverter));
			s_globalRulesRegistry.Add("date", typeof(DatePatternConverter));

			s_globalRulesRegistry.Add("exception", typeof(ExceptionPatternConverter));

			s_globalRulesRegistry.Add("F", typeof(FileLocationPatternConverter));
			s_globalRulesRegistry.Add("file", typeof(FileLocationPatternConverter));

			s_globalRulesRegistry.Add("l", typeof(FullLocationPatternConverter));
			s_globalRulesRegistry.Add("location", typeof(FullLocationPatternConverter));

			s_globalRulesRegistry.Add("L", typeof(LineLocationPatternConverter));
			s_globalRulesRegistry.Add("line", typeof(LineLocationPatternConverter));

			s_globalRulesRegistry.Add("m", typeof(MessagePatternConverter));
			s_globalRulesRegistry.Add("message", typeof(MessagePatternConverter));

			s_globalRulesRegistry.Add("M", typeof(MethodLocationPatternConverter));
			s_globalRulesRegistry.Add("method", typeof(MethodLocationPatternConverter));

			s_globalRulesRegistry.Add("p", typeof(LevelPatternConverter));
			s_globalRulesRegistry.Add("level", typeof(LevelPatternConverter));

			s_globalRulesRegistry.Add("P", typeof(PropertyPatternConverter));
			s_globalRulesRegistry.Add("property", typeof(PropertyPatternConverter));
			s_globalRulesRegistry.Add("properties", typeof(PropertyPatternConverter));

			s_globalRulesRegistry.Add("r", typeof(RelativeTimePatternConverter));
			s_globalRulesRegistry.Add("timestamp", typeof(RelativeTimePatternConverter));

			s_globalRulesRegistry.Add("t", typeof(ThreadPatternConverter));
			s_globalRulesRegistry.Add("thread", typeof(ThreadPatternConverter));

			// For backwards compatibility the NDC patters
			s_globalRulesRegistry.Add("x", typeof(NdcPatternConverter));
			s_globalRulesRegistry.Add("ndc", typeof(NdcPatternConverter));

			// For backwards compatibility the MDC patters just do a property lookup
			s_globalRulesRegistry.Add("X", typeof(PropertyPatternConverter));
			s_globalRulesRegistry.Add("mdc", typeof(PropertyPatternConverter));

			s_globalRulesRegistry.Add("a", typeof(AppDomainPatternConverter));
			s_globalRulesRegistry.Add("appdomain", typeof(AppDomainPatternConverter));

			s_globalRulesRegistry.Add("u", typeof(IdentityPatternConverter));
			s_globalRulesRegistry.Add("identity", typeof(IdentityPatternConverter));

			s_globalRulesRegistry.Add("utcdate", typeof(UtcDatePatternConverter));
			s_globalRulesRegistry.Add("utcDate", typeof(UtcDatePatternConverter));
			s_globalRulesRegistry.Add("UtcDate", typeof(UtcDatePatternConverter));

			s_globalRulesRegistry.Add("w", typeof(UserNamePatternConverter));
			s_globalRulesRegistry.Add("username", typeof(UserNamePatternConverter));
		}

		#endregion Static Constructor

		#region Constructors

		/// <summary>
		/// Constructs a PatternLayout using the DefaultConversionPattern
		/// </summary>
		/// <remarks>
		/// <para>
		/// The default pattern just produces the application supplied message.
		/// </para>
		/// <para>
		/// Note to Inheritors: This constructor calls the virtual method
		/// <see cref="CreatePatternParser"/>. If you override this method be
		/// aware that it will be called before your is called constructor.
		/// </para>
		/// <para>
		/// As per the <see cref="IOptionHandler"/> contract the <see cref="ActivateOptions"/>
		/// method must be called after the properties on this object have been
		/// configured.
		/// </para>
		/// </remarks>
		public PatternLayout() : this(DefaultConversionPattern)
		{
		}

		/// <summary>
		/// Constructs a PatternLayout using the supplied conversion pattern
		/// </summary>
		/// <param name="pattern">the pattern to use</param>
		/// <remarks>
		/// <para>
		/// Note to Inheritors: This constructor calls the virtual method
		/// <see cref="CreatePatternParser"/>. If you override this method be
		/// aware that it will be called before your is called constructor.
		/// </para>
		/// <para>
		/// When using this constructor the <see cref="ActivateOptions"/> method 
		/// need not be called. This may not be the case when using a subclass.
		/// </para>
		/// </remarks>
		public PatternLayout(string pattern) 
		{
			// By default we do not process the exception
			IgnoresException = true;

			m_pattern = pattern;
			if (m_pattern == null)
			{
				m_pattern = DefaultConversionPattern;
			}

			ActivateOptions();
		}

		#endregion
  
		/// <summary>
		/// The pattern formatting string
		/// </summary>
		/// <remarks>
		/// <para>
		/// The <b>ConversionPattern</b> option. This is the string which
		/// controls formatting and consists of a mix of literal content and
		/// conversion specifiers.
		/// </para>
		/// </remarks>
		public string ConversionPattern
		{
			get { return m_pattern;	}
			set { m_pattern = value; }
		}

		/// <summary>
		/// Create the pattern parser instance
		/// </summary>
		/// <param name="pattern">the pattern to parse</param>
		/// <returns>The <see cref="PatternParser"/> that will format the event</returns>
		/// <remarks>
		/// <para>
		/// Creates the <see cref="PatternParser"/> used to parse the conversion string. Sets the
		/// global and instance rules on the <see cref="PatternParser"/>.
		/// </para>
		/// </remarks>
		virtual protected PatternParser CreatePatternParser(string pattern) 
		{
			PatternParser patternParser = new PatternParser(pattern);

			// Add all the builtin patterns
			foreach(DictionaryEntry entry in s_globalRulesRegistry)
			{
				patternParser.PatternConverters[entry.Key] = entry.Value;
			}
			// Add the instance patterns
			foreach(DictionaryEntry entry in m_instanceRulesRegistry)
			{
				patternParser.PatternConverters[entry.Key] = entry.Value;
			}

			return patternParser;
		}
  
		#region Implementation of IOptionHandler

		/// <summary>
		/// Initialize layout options
		/// </summary>
		/// <remarks>
		/// <para>
		/// This is part of the <see cref="IOptionHandler"/> delayed object
		/// activation scheme. The <see cref="ActivateOptions"/> method must 
		/// be called on this object after the configuration properties have
		/// been set. Until <see cref="ActivateOptions"/> is called this
		/// object is in an undefined state and must not be used. 
		/// </para>
		/// <para>
		/// If any of the configuration properties are modified then 
		/// <see cref="ActivateOptions"/> must be called again.
		/// </para>
		/// </remarks>
		override public void ActivateOptions() 
		{
			m_head = CreatePatternParser(m_pattern).Parse();

			PatternConverter curConverter = m_head;
			while(curConverter != null)
			{
				PatternLayoutConverter layoutConverter = curConverter as PatternLayoutConverter;
				if (layoutConverter != null)
				{
					if (!layoutConverter.IgnoresException)
					{
						// Found converter that handles the exception
						this.IgnoresException = false;

						break;
					}
				}
				curConverter = curConverter.Next;
			}
		}

		#endregion

		#region Override implementation of LayoutSkeleton

		/// <summary>
		/// Produces a formatted string as specified by the conversion pattern.
		/// </summary>
		/// <param name="loggingEvent">the event being logged</param>
		/// <param name="writer">The TextWriter to write the formatted event to</param>
		/// <remarks>
		/// <para>
		/// Parse the <see cref="LoggingEvent"/> using the patter format
		/// specified in the <see cref="ConversionPattern"/> property.
		/// </para>
		/// </remarks>
		override public void Format(TextWriter writer, LoggingEvent loggingEvent) 
		{
			if (writer == null)
			{
				throw new ArgumentNullException("writer");
			}
			if (loggingEvent == null)
			{
				throw new ArgumentNullException("loggingEvent");
			}

			PatternConverter c = m_head;

			// loop through the chain of pattern converters
			while(c != null) 
			{
				c.Format(writer, loggingEvent);
				c = c.Next;
			}
		}

		#endregion

		/// <summary>
		/// Add a converter to this PatternLayout
		/// </summary>
		/// <param name="converterInfo">the converter info</param>
		/// <remarks>
		/// <para>
		/// This version of the method is used by the configurator.
		/// Programmatic users should use the alternative <see cref="AddConverter(string,Type)"/> method.
		/// </para>
		/// </remarks>
		public void AddConverter(ConverterInfo converterInfo)
		{
			AddConverter(converterInfo.Name, converterInfo.Type);
		}

		/// <summary>
		/// Add a converter to this PatternLayout
		/// </summary>
		/// <param name="name">the name of the conversion pattern for this converter</param>
		/// <param name="type">the type of the converter</param>
		/// <remarks>
		/// <para>
		/// Add a named pattern converter to this instance. This
		/// converter will be used in the formatting of the event.
		/// This method must be called before <see cref="ActivateOptions"/>.
		/// </para>
		/// <para>
		/// The <paramref name="type"/> specified must extend the 
		/// <see cref="PatternConverter"/> type.
		/// </para>
		/// </remarks>
		public void AddConverter(string name, Type type)
		{
			if (name == null) throw new ArgumentNullException("name");
			if (type == null) throw new ArgumentNullException("type");

			if (!typeof(PatternConverter).IsAssignableFrom(type))
			{
				throw new ArgumentException("The converter type specified ["+type+"] must be a subclass of log4net.Util.PatternConverter", "type");
			}
			m_instanceRulesRegistry[name] = type;
		}

		/// <summary>
		/// Wrapper class used to map converter names to converter types
		/// </summary>
		/// <remarks>
		/// <para>
		/// Pattern converter info class used during configuration to
		/// pass to the <see cref="PatternLayout.AddConverter(ConverterInfo)"/>
		/// method.
		/// </para>
		/// </remarks>
		public sealed class ConverterInfo
		{
			private string m_name;
			private Type m_type;

			/// <summary>
			/// default constructor
			/// </summary>
			public ConverterInfo()
			{
			}

			/// <summary>
			/// Gets or sets the name of the conversion pattern
			/// </summary>
			/// <remarks>
			/// <para>
			/// The name of the pattern in the format string
			/// </para>
			/// </remarks>
			public string Name
			{
				get { return m_name; }
				set { m_name = value; }
			}

			/// <summary>
			/// Gets or sets the type of the converter
			/// </summary>
			/// <remarks>
			/// <para>
			/// The value specified must extend the 
			/// <see cref="PatternConverter"/> type.
			/// </para>
			/// </remarks>
			public Type Type
			{
				get { return m_type; }
				set { m_type = value; }
			}
		}
	}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性一级生活| 欧美性色黄大片| 一区二区三区.www| 日韩女优av电影| 色婷婷亚洲婷婷| 韩国av一区二区三区四区| 亚洲最色的网站| 中文字幕精品三区| 欧美一级欧美一级在线播放| 成人福利电影精品一区二区在线观看| 蜜桃av一区二区| 亚洲精品视频一区二区| 国产日本欧美一区二区| 日韩三级视频在线看| 欧洲一区二区三区在线| 成人免费高清在线观看| 久久99精品国产麻豆不卡| 一区二区三区成人在线视频| 久久久精品国产免费观看同学| 欧美丰满高潮xxxx喷水动漫| 在线观看日韩国产| av一二三不卡影片| 成人福利在线看| 成人性生交大片免费看视频在线| 韩国三级中文字幕hd久久精品| 日本欧美肥老太交大片| 亚洲成人777| 伊人开心综合网| 自拍偷拍国产亚洲| 国产精品久久久久9999吃药| 久久久久国产一区二区三区四区 | 欧美电影免费观看高清完整版| 一本一道波多野结衣一区二区 | 成人av网站大全| 国产精品一区二区三区四区| 久久99精品国产麻豆不卡| 久久99国产乱子伦精品免费| 日韩av电影免费观看高清完整版| 亚洲第一狼人社区| 亚洲成a人v欧美综合天堂| 亚洲国产人成综合网站| 亚洲精品国产一区二区三区四区在线| 中文字幕一区不卡| 国产精品成人一区二区艾草| 亚洲视频香蕉人妖| 亚洲一区在线观看视频| 亚洲一区免费观看| 日韩黄色小视频| 美洲天堂一区二卡三卡四卡视频| 久久精品国产色蜜蜜麻豆| 激情综合网最新| 国产aⅴ综合色| 99久久精品国产毛片| 91视频在线看| 欧美日本在线看| 91精品久久久久久久91蜜桃 | wwwwxxxxx欧美| 久久九九久精品国产免费直播| 国产精品亲子伦对白| 亚洲靠逼com| 亚洲国产精品久久一线不卡| 日本va欧美va欧美va精品| 国产乱淫av一区二区三区| 成人性生交大片免费看中文网站| 色婷婷综合激情| 欧美一区二区精品在线| 国产午夜亚洲精品理论片色戒 | 91视视频在线观看入口直接观看www| 色欧美日韩亚洲| 欧美日韩视频第一区| 日韩三级av在线播放| 国产日韩精品一区| 亚洲电影一区二区| 久久99久久99| 一本色道久久综合精品竹菊| 69久久99精品久久久久婷婷| 久久精品男人天堂av| 亚洲激情自拍偷拍| 久久精品国产澳门| 色天天综合久久久久综合片| 欧美一区二区三区喷汁尤物| 国产三级三级三级精品8ⅰ区| 亚洲一区免费在线观看| 国产在线精品一区二区| 欧洲一区二区三区在线| 国产日韩欧美一区二区三区乱码 | 石原莉奈在线亚洲二区| 福利一区福利二区| 91精品久久久久久蜜臀| 国产精品电影一区二区| 久久精品国产**网站演员| 91色九色蝌蚪| 久久久久久影视| 婷婷六月综合网| 91尤物视频在线观看| 久久综合九色综合欧美亚洲| 亚洲一区在线观看网站| 成人免费观看视频| 精品国产sm最大网站| 一区二区三区四区蜜桃| 国产999精品久久久久久绿帽| 制服.丝袜.亚洲.另类.中文| 亚洲视频中文字幕| 国产一区二区精品久久| 欧美裸体一区二区三区| 亚洲欧美日韩久久| 国产成人综合网| 日韩精品一区二区三区视频播放 | 国产精品视频看| 蜜桃视频第一区免费观看| 在线中文字幕不卡| 国产精品区一区二区三| 国产综合色产在线精品| 日韩三级在线免费观看| 天堂久久久久va久久久久| 一本大道久久精品懂色aⅴ| 国产区在线观看成人精品| 久久激情五月激情| 欧美一级日韩不卡播放免费| 亚洲成人一二三| 91官网在线观看| 亚洲免费av观看| gogo大胆日本视频一区| 日本一区二区三区久久久久久久久不 | 日韩色在线观看| 日韩在线一区二区| 欧美日韩你懂的| 亚洲一区二区三区四区在线观看| av综合在线播放| 国产精品美女久久久久久久| 国产精品一区二区在线播放| 久久无码av三级| 精品亚洲aⅴ乱码一区二区三区| 欧美一卡二卡在线| 另类小说综合欧美亚洲| 欧美成人精精品一区二区频| 日韩国产一二三区| 91精品婷婷国产综合久久 | 99久久精品情趣| 国产精品福利在线播放| 99re热这里只有精品免费视频| 国产精品丝袜一区| 99精品久久久久久| 一级女性全黄久久生活片免费| 欧美在线视频全部完| 亚洲第一久久影院| 欧美一区日韩一区| 看片网站欧美日韩| 久久久影视传媒| 国产suv精品一区二区6| 亚洲天堂2014| 欧美在线一区二区| 奇米777欧美一区二区| 欧美一级免费观看| 国产乱码字幕精品高清av| 国产肉丝袜一区二区| 91在线观看成人| 三级成人在线视频| 精品久久久久久久久久久久包黑料 | 一本大道久久a久久综合婷婷| 夜夜嗨av一区二区三区网页| 3d动漫精品啪啪一区二区竹菊 | 色婷婷av一区| 三级在线观看一区二区 | 亚洲三级视频在线观看| 欧美日韩在线精品一区二区三区激情| 污片在线观看一区二区| 精品国产sm最大网站免费看| 99精品视频免费在线观看| 午夜影院久久久| 久久综合丝袜日本网| 91老师国产黑色丝袜在线| 婷婷综合久久一区二区三区| 久久―日本道色综合久久| 91在线观看污| 美女精品一区二区| 中文字幕不卡在线播放| 欧美日韩国产综合一区二区| 激情综合色播五月| 亚洲另类中文字| 日韩欧美在线一区二区三区| 懂色av中文一区二区三区| 午夜精品久久久久久久久| 久久久精品黄色| 欧美日韩精品福利| 成人一区二区三区| 奇米影视一区二区三区| 国产精品久久久久天堂| 欧美一区二区高清| 色综合久久综合网欧美综合网| 麻豆精品蜜桃视频网站| 亚洲免费三区一区二区| 精品国产乱码久久久久久图片| 欧美在线免费观看视频| 东方欧美亚洲色图在线| 久久精品久久精品| 亚洲成人动漫精品| 国产精品久久夜| 久久色视频免费观看| 在线播放亚洲一区|