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

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

?? logger.cs

?? 詳細講述了數據庫編程
?? CS
?? 第 1 頁 / 共 2 頁
字號:
		/// </value>
		/// <remarks>
		/// <para>
		/// The name of this logger
		/// </para>
		/// </remarks>
		virtual public string Name
		{
			get { return m_name; }
		}

		/// <summary>
		/// This generic form is intended to be used by wrappers.
		/// </summary>
		/// <param name="callerStackBoundaryDeclaringType">The declaring type of the method that is
		/// the stack boundary into the logging system for this call.</param>
		/// <param name="level">The level of the message to be logged.</param>
		/// <param name="message">The message object to log.</param>
		/// <param name="exception">The exception to log, including its stack trace.</param>
		/// <remarks>
		/// <para>
		/// Generate a logging event for the specified <paramref name="level"/> using
		/// the <paramref name="message"/> and <paramref name="exception"/>.
		/// </para>
		/// <para>
		/// This method must not throw any exception to the caller.
		/// </para>
		/// </remarks>
		virtual public void Log(Type callerStackBoundaryDeclaringType, Level level, object message, Exception exception) 
		{
			try
			{
				if (IsEnabledFor(level))
				{
					ForcedLog((callerStackBoundaryDeclaringType != null) ? callerStackBoundaryDeclaringType : ThisDeclaringType, level, message, exception);
				}
			}
			catch (Exception ex)
			{
				log4net.Util.LogLog.Error("Log: Exception while logging", ex);
			}
			catch
			{
				log4net.Util.LogLog.Error("Log: Exception while logging");
			}
		}

		/// <summary>
		/// This is the most generic printing method that is intended to be used 
		/// by wrappers.
		/// </summary>
		/// <param name="logEvent">The event being logged.</param>
		/// <remarks>
		/// <para>
		/// Logs the specified logging event through this logger.
		/// </para>
		/// <para>
		/// This method must not throw any exception to the caller.
		/// </para>
		/// </remarks>
		virtual public void Log(LoggingEvent logEvent)
		{
			try
			{
				if (logEvent != null)
				{
					if (IsEnabledFor(logEvent.Level))
					{
						ForcedLog(logEvent);
					}
				}
			}
			catch (Exception ex)
			{
				log4net.Util.LogLog.Error("Log: Exception while logging", ex);
			}
			catch
			{
				log4net.Util.LogLog.Error("Log: Exception while logging");
			}
		}

		/// <summary>
		/// Checks if this logger is enabled for a given <see cref="Level"/> passed as parameter.
		/// </summary>
		/// <param name="level">The level to check.</param>
		/// <returns>
		/// <c>true</c> if this logger is enabled for <c>level</c>, otherwise <c>false</c>.
		/// </returns>
		/// <remarks>
		/// <para>
		/// Test if this logger is going to log events of the specified <paramref name="level"/>.
		/// </para>
		/// <para>
		/// This method must not throw any exception to the caller.
		/// </para>
		/// </remarks>
		virtual public bool IsEnabledFor(Level level)
		{
			try
			{
				if (level != null)
				{
					if (m_hierarchy.IsDisabled(level))
					{
						return false;
					}
					return level >= this.EffectiveLevel;
				}
			}
			catch (Exception ex)
			{
				log4net.Util.LogLog.Error("Log: Exception while logging", ex);
			}
			catch
			{
				log4net.Util.LogLog.Error("Log: Exception while logging");
			}
			return false;
		}

		/// <summary>
		/// Gets the <see cref="ILoggerRepository"/> where this 
		/// <c>Logger</c> instance is attached to.
		/// </summary>
		/// <value>
		/// The <see cref="ILoggerRepository" /> that this logger belongs to.
		/// </value>
		/// <remarks>
		/// <para>
		/// Gets the <see cref="ILoggerRepository"/> where this 
		/// <c>Logger</c> instance is attached to.
		/// </para>
		/// </remarks>
		public ILoggerRepository Repository
		{ 
			get { return m_hierarchy; }
		}

  		#endregion Implementation of ILogger

		/// <summary>
		/// Deliver the <see cref="LoggingEvent"/> to the attached appenders.
		/// </summary>
		/// <param name="loggingEvent">The event to log.</param>
		/// <remarks>
		/// <para>
		/// Call the appenders in the hierarchy starting at
		/// <c>this</c>. If no appenders could be found, emit a
		/// warning.
		/// </para>
		/// <para>
		/// This method calls all the appenders inherited from the
		/// hierarchy circumventing any evaluation of whether to log or not
		/// to log the particular log request.
		/// </para>
		/// </remarks>
		virtual protected void CallAppenders(LoggingEvent loggingEvent) 
		{
			if (loggingEvent == null)
			{
				throw new ArgumentNullException("loggingEvent");
			}

			int writes = 0;

			for(Logger c=this; c != null; c=c.m_parent) 
			{
				if (c.m_appenderAttachedImpl != null) 
				{
					// Protected against simultaneous call to addAppender, removeAppender,...
					c.m_appenderLock.AcquireReaderLock();
					try
					{
						if (c.m_appenderAttachedImpl != null) 
						{
							writes += c.m_appenderAttachedImpl.AppendLoopOnAppenders(loggingEvent);
						}
					}
					finally
					{
						c.m_appenderLock.ReleaseReaderLock();
					}
				}

				if (!c.m_additive) 
				{
					break;
				}
			}
			
			// No appenders in hierarchy, warn user only once.
			//
			// Note that by including the AppDomain values for the currently running
			// thread, it becomes much easier to see which application the warning
			// is from, which is especially helpful in a multi-AppDomain environment
			// (like IIS with multiple VDIRS).  Without this, it can be difficult
			// or impossible to determine which .config file is missing appender
			// definitions.
			//
			if (!m_hierarchy.EmittedNoAppenderWarning && writes == 0) 
			{
				LogLog.Debug("Logger: No appenders could be found for logger [" + Name + "] repository [" + Repository.Name + "]");
				LogLog.Debug("Logger: Please initialize the log4net system properly.");
				try
				{
					LogLog.Debug("Logger:    Current AppDomain context information: ");
					LogLog.Debug("Logger:       BaseDirectory   : " + SystemInfo.ApplicationBaseDirectory);
#if !NETCF
					LogLog.Debug("Logger:       FriendlyName    : " + AppDomain.CurrentDomain.FriendlyName);
					LogLog.Debug("Logger:       DynamicDirectory: " + AppDomain.CurrentDomain.DynamicDirectory);
#endif
				}
				catch(System.Security.SecurityException)
				{
					// Insufficient permissions to display info from the AppDomain
				}
				m_hierarchy.EmittedNoAppenderWarning = true;
			}
		}

		/// <summary>
		/// Closes all attached appenders implementing the <see cref="IAppenderAttachable"/> interface.
		/// </summary>
		/// <remarks>
		/// <para>
		/// Used to ensure that the appenders are correctly shutdown.
		/// </para>
		/// </remarks>
		virtual public void CloseNestedAppenders() 
		{
			m_appenderLock.AcquireWriterLock();
			try
			{
				if (m_appenderAttachedImpl != null)
				{
					AppenderCollection appenders = m_appenderAttachedImpl.Appenders;
					foreach(IAppender appender in appenders)
					{
						if (appender is IAppenderAttachable)
						{
							appender.Close();
						}
					}
				}
			}
			finally
			{
				m_appenderLock.ReleaseWriterLock();
			}
		}

		/// <summary>
		/// This is the most generic printing method. This generic form is intended to be used by wrappers
		/// </summary>
		/// <param name="level">The level of the message to be logged.</param>
		/// <param name="message">The message object to log.</param>
		/// <param name="exception">The exception to log, including its stack trace.</param>
		/// <remarks>
		/// <para>
		/// Generate a logging event for the specified <paramref name="level"/> using
		/// the <paramref name="message"/>.
		/// </para>
		/// </remarks>
		virtual public void Log(Level level, object message, Exception exception) 
		{
			if (IsEnabledFor(level))
			{
				ForcedLog(ThisDeclaringType, level, message, exception);
			}
		}

		/// <summary>
		/// Creates a new logging event and logs the event without further checks.
		/// </summary>
		/// <param name="callerStackBoundaryDeclaringType">The declaring type of the method that is
		/// the stack boundary into the logging system for this call.</param>
		/// <param name="level">The level of the message to be logged.</param>
		/// <param name="message">The message object to log.</param>
		/// <param name="exception">The exception to log, including its stack trace.</param>
		/// <remarks>
		/// <para>
		/// Generates a logging event and delivers it to the attached
		/// appenders.
		/// </para>
		/// </remarks>
		virtual protected void ForcedLog(Type callerStackBoundaryDeclaringType, Level level, object message, Exception exception) 
		{
			CallAppenders(new LoggingEvent(callerStackBoundaryDeclaringType, this.Hierarchy, this.Name, level, message, exception));
		}

		/// <summary>
		/// Creates a new logging event and logs the event without further checks.
		/// </summary>
		/// <param name="logEvent">The event being logged.</param>
		/// <remarks>
		/// <para>
		/// Delivers the logging event to the attached appenders.
		/// </para>
		/// </remarks>
		virtual protected void ForcedLog(LoggingEvent logEvent) 
		{
			// The logging event may not have been created by this logger
			// the Repository may not be correctly set on the event. This
			// is required for the appenders to correctly lookup renderers etc...
			logEvent.EnsureRepository(this.Hierarchy);

			CallAppenders(logEvent);
		}

		#region Private Static Fields

		/// <summary>
		/// The fully qualified type of the Logger class.
		/// </summary>
		private readonly static Type ThisDeclaringType = typeof(Logger);

		#endregion Private Static Fields

		#region Private Instance Fields

		/// <summary>
		/// The name of this logger.
		/// </summary>
		private readonly string m_name;  

		/// <summary>
		/// The assigned level of this logger. 
		/// </summary>
		/// <remarks>
		/// <para>
		/// The <c>level</c> variable need not be 
		/// assigned a value in which case it is inherited 
		/// form the hierarchy.
		/// </para>
		/// </remarks>
		private Level m_level;

		/// <summary>
		/// The parent of this logger.
		/// </summary>
		/// <remarks>
		/// <para>
		/// The parent of this logger. 
		/// All loggers have at least one ancestor which is the root logger.
		/// </para>
		/// </remarks>
		private Logger m_parent;

		/// <summary>
		/// Loggers need to know what Hierarchy they are in.
		/// </summary>
		/// <remarks>
		/// <para>
		/// Loggers need to know what Hierarchy they are in.
		/// The hierarchy that this logger is a member of is stored
		/// here.
		/// </para>
		/// </remarks>
		private Hierarchy m_hierarchy;

		/// <summary>
		/// Helper implementation of the <see cref="IAppenderAttachable"/> interface
		/// </summary>
		private log4net.Util.AppenderAttachedImpl m_appenderAttachedImpl;

		/// <summary>
		/// Flag indicating if child loggers inherit their parents appenders
		/// </summary>
		/// <remarks>
		/// <para>
		/// Additivity is set to true by default, that is children inherit
		/// the appenders of their ancestors by default. If this variable is
		/// set to <c>false</c> then the appenders found in the
		/// ancestors of this logger are not used. However, the children
		/// of this logger will inherit its appenders, unless the children
		/// have their additivity flag set to <c>false</c> too. See
		/// the user manual for more details.
		/// </para>
		/// </remarks>
		private bool m_additive = true;

		/// <summary>
		/// Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl
		/// </summary>
		private readonly ReaderWriterLock m_appenderLock = new ReaderWriterLock();
  
		#endregion
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久88色偷偷免费| 乱中年女人伦av一区二区| 从欧美一区二区三区| 欧美一区二区精品在线| 蜜臀av性久久久久蜜臀aⅴ| 久久久久久久久一| 99精品视频一区| 中文字幕一区二区三区色视频| 国产sm精品调教视频网站| 国产亚洲综合色| 91色porny在线视频| 午夜免费久久看| 久久免费视频一区| 91在线一区二区三区| 精品一区二区三区在线观看国产| 久久先锋资源网| 欧美午夜一区二区三区免费大片| 亚洲mv在线观看| 久久久噜噜噜久久人人看 | 亚洲国产成人私人影院tom| 国产·精品毛片| 日韩高清一区在线| 亚洲精品欧美综合四区| 欧美一区二区三区免费观看视频 | 亚洲永久免费av| 精品国产免费久久| 7777精品伊人久久久大香线蕉完整版| 成人av一区二区三区| 久久精品72免费观看| 一区二区三区四区蜜桃| 中文字幕在线不卡一区| 国产精品―色哟哟| 精品国产91亚洲一区二区三区婷婷 | 成人高清视频在线| 国产精品一区二区不卡| 不卡一区二区中文字幕| 色噜噜狠狠成人网p站| 99精品久久99久久久久| 国产一区不卡精品| 高潮精品一区videoshd| 91免费看`日韩一区二区| 色综合av在线| 欧美丰满美乳xxx高潮www| 欧美体内she精视频| 色88888久久久久久影院按摩| 97久久超碰国产精品| 色综合一区二区三区| 欧美日韩国产经典色站一区二区三区 | 精品91自产拍在线观看一区| 国产精品久久久久久久午夜片| 亚洲国产成人av网| 国产原创一区二区三区| 在线观看国产91| 欧美国产日韩精品免费观看| 亚洲自拍与偷拍| 国内精品免费**视频| 99久久久国产精品| 欧美一区二区视频网站| 国产日产欧美一区| 蜜桃久久精品一区二区| 91蜜桃网址入口| 久久久久久97三级| 黄色小说综合网站| 91精品黄色片免费大全| 亚欧色一区w666天堂| 一本久道久久综合中文字幕| 欧美日韩视频不卡| 亚洲裸体xxx| eeuss鲁片一区二区三区| 精品国产青草久久久久福利| 亚洲成av人片在线| 欧美日韩国产乱码电影| 亚洲蜜臀av乱码久久精品蜜桃| 国产精品一区二区91| 久久久久88色偷偷免费| 国产精品99久久久| 精品国产一区二区三区四区四| 亚洲午夜精品一区二区三区他趣| 日本黄色一区二区| 有码一区二区三区| 欧美三级三级三级爽爽爽| 亚洲精品国产成人久久av盗摄| 丰满岳乱妇一区二区三区 | 日韩欧美电影在线| 国产69精品久久99不卡| 一区二区三区精品在线| 91九色最新地址| 五月激情六月综合| 欧美mv和日韩mv的网站| 国产一区二区三区视频在线播放| 久久免费的精品国产v∧| 成人激情小说乱人伦| 亚洲视频网在线直播| 91精品国产综合久久久久| 国产伦理精品不卡| 国产精品大尺度| 6080亚洲精品一区二区| 激情成人综合网| 午夜一区二区三区在线观看| 久久久www免费人成精品| 91官网在线观看| 国产成人啪午夜精品网站男同| 亚洲精品视频自拍| 久久久精品影视| 欧美另类videos死尸| 色综合天天综合狠狠| 久久电影网站中文字幕| 亚洲激情综合网| ㊣最新国产の精品bt伙计久久| 精品国产乱码久久久久久蜜臀| 欧美裸体一区二区三区| 色综合天天综合狠狠| av亚洲精华国产精华| 不卡的av网站| 91福利社在线观看| 欧美日韩亚洲综合| 欧美一区二区三区免费观看视频| 久久免费看少妇高潮| 一区二区在线观看视频| 婷婷国产在线综合| 色噜噜狠狠成人中文综合 | 午夜激情一区二区| 久久99精品国产麻豆不卡| 成人美女视频在线观看18| 欧美日韩中文字幕一区| 精品国产乱码久久久久久闺蜜| 久久久久综合网| 亚洲成人黄色小说| 国产风韵犹存在线视精品| 丁香六月久久综合狠狠色| 99亚偷拍自图区亚洲| 日本高清免费不卡视频| 欧美伊人久久久久久久久影院| 91精品国产综合久久香蕉麻豆| 久久日一线二线三线suv| 亚洲另类在线制服丝袜| 久草在线在线精品观看| 在线观看日韩电影| 欧美国产禁国产网站cc| 天使萌一区二区三区免费观看| 成人免费视频app| 欧美日韩激情一区二区三区| 中文字幕在线一区免费| 极品少妇xxxx偷拍精品少妇| 欧美日韩一级二级| 亚洲va欧美va天堂v国产综合| 色天使色偷偷av一区二区| 国产清纯在线一区二区www| 精品一区二区在线观看| 在线欧美日韩国产| 日韩欧美综合在线| 亚洲一级二级三级在线免费观看| 久久国产精品无码网站| 欧洲精品视频在线观看| 国产精品视频在线看| 国产麻豆视频一区| 国产精品情趣视频| 成年人国产精品| 国产精品视频一二三区 | 一区二区三区国产精华| 色婷婷一区二区三区四区| 亚洲国产一区二区在线播放| 日韩一级欧美一级| 国产一区二区免费在线| 中文字幕乱码一区二区免费| 91亚洲精品久久久蜜桃| 亚洲国产成人av好男人在线观看| 成人av动漫网站| 久久精品国产99久久6| 国产精品区一区二区三区| 91麻豆视频网站| 免费成人在线观看视频| 国产女人18水真多18精品一级做| 欧美日韩国产bt| 欧美性猛片xxxx免费看久爱| 国产一区二区三区久久久| 国产视频一区在线观看| 精品福利av导航| 欧美电影免费观看高清完整版 | 色偷偷成人一区二区三区91| 成人午夜大片免费观看| 国产99一区视频免费| 国产精品一区二区三区99| 国产老女人精品毛片久久| 精品一区二区三区在线观看| 国产毛片精品视频| 国产成人小视频| 91蜜桃视频在线| 在线播放中文字幕一区| 久久一留热品黄| ...av二区三区久久精品| 亚洲自拍偷拍av| 另类小说一区二区三区| 成人美女在线观看| 欧美图区在线视频| 日韩欧美国产三级电影视频| 成人免费一区二区三区在线观看| 欧美人与禽zozo性伦| 在线观看欧美精品| 一本大道久久a久久综合|