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

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

?? fileappender.cs

?? 詳細(xì)講述了數(shù)據(jù)庫編程
?? CS
?? 第 1 頁 / 共 3 頁
字號(hào):
			{
				m_fileName = ConvertToFullPath(m_fileName.Trim());
			}

			if (m_fileName != null) 
			{
				SafeOpenFile(m_fileName, m_appendToFile);
			} 
			else 
			{
				LogLog.Warn("FileAppender: File option not set for appender ["+Name+"].");
				LogLog.Warn("FileAppender: Are you using FileAppender instead of ConsoleAppender?");
			}
		}

		#endregion Override implementation of AppenderSkeleton

		#region Override implementation of TextWriterAppender

		/// <summary>
		/// Closes any previously opened file and calls the parent's <see cref="TextWriterAppender.Reset"/>.
		/// </summary>
		/// <remarks>
		/// <para>
		/// Resets the filename and the file stream.
		/// </para>
		/// </remarks>
		override protected void Reset() 
		{
			base.Reset();
			m_fileName = null;
		}

 		/// <summary>
 		/// Called to initialize the file writer
 		/// </summary>
 		/// <remarks>
 		/// <para>
 		/// Will be called for each logged message until the file is
 		/// successfully opened.
 		/// </para>
 		/// </remarks>
 		override protected void PrepareWriter()
 		{
			SafeOpenFile(m_fileName, m_appendToFile);
 		}

		/// <summary>
		/// This method is called by the <see cref="AppenderSkeleton.DoAppend(LoggingEvent)"/>
		/// method. 
		/// </summary>
		/// <param name="loggingEvent">The event to log.</param>
		/// <remarks>
		/// <para>
		/// Writes a log statement to the output stream if the output stream exists 
		/// and is writable.  
		/// </para>
		/// <para>
		/// The format of the output will depend on the appender's layout.
		/// </para>
		/// </remarks>
		override protected void Append(LoggingEvent loggingEvent) 
		{
			if (m_stream.AcquireLock())
			{
				try
				{
					base.Append(loggingEvent);
				}
				finally
				{
					m_stream.ReleaseLock();
				}
			}
		}

		/// <summary>
		/// This method is called by the <see cref="AppenderSkeleton.DoAppend(LoggingEvent[])"/>
		/// method. 
		/// </summary>
		/// <param name="loggingEvents">The array of events to log.</param>
		/// <remarks>
		/// <para>
		/// Acquires the output file locks once before writing all the events to
		/// the stream.
		/// </para>
		/// </remarks>
		override protected void Append(LoggingEvent[] loggingEvents) 
		{
			if (m_stream.AcquireLock())
			{
				try
				{
					base.Append(loggingEvents);
				}
				finally
				{
					m_stream.ReleaseLock();
				}
			}
		}

		/// <summary>
		/// Writes a footer as produced by the embedded layout's <see cref="ILayout.Footer"/> property.
		/// </summary>
		/// <remarks>
		/// <para>
		/// Writes a footer as produced by the embedded layout's <see cref="ILayout.Footer"/> property.
		/// </para>
		/// </remarks>
		protected override void WriteFooter() 
		{
			if (m_stream!=null)
			{
				//WriteFooter can be called even before a file is opened
				m_stream.AcquireLock();
				try
				{
					base.WriteFooter();
				}
				finally
				{
					m_stream.ReleaseLock();
				}
			}
		}

		/// <summary>
		/// Writes a header produced by the embedded layout's <see cref="ILayout.Header"/> property.
		/// </summary>
		/// <remarks>
		/// <para>
		/// Writes a header produced by the embedded layout's <see cref="ILayout.Header"/> property.
		/// </para>
		/// </remarks>
		protected override void WriteHeader() 
		{
			if (m_stream!=null)
			{
				if (m_stream.AcquireLock())
				{
					try
					{
						base.WriteHeader();
					}
					finally
					{
						m_stream.ReleaseLock();
					}
				}
			}
		}

		/// <summary>
		/// Closes the underlying <see cref="TextWriter"/>.
		/// </summary>
		/// <remarks>
		/// <para>
		/// Closes the underlying <see cref="TextWriter"/>.
		/// </para>
		/// </remarks>
		protected override void CloseWriter() 
		{
			if (m_stream!=null)
			{
				m_stream.AcquireLock();
				try
				{
					base.CloseWriter();
				}
				finally
				{
					m_stream.ReleaseLock();
				}
			}
		}

		#endregion Override implementation of TextWriterAppender

		#region Public Instance Methods

		/// <summary>
		/// Closes the previously opened file.
		/// </summary>
		/// <remarks>
		/// <para>
		/// Writes the <see cref="ILayout.Footer"/> to the file and then
		/// closes the file.
		/// </para>
		/// </remarks>
		protected void CloseFile() 
		{
			WriteFooterAndCloseWriter();
		}

		#endregion Public Instance Methods

		#region Protected Instance Methods

		/// <summary>
		/// Sets and <i>opens</i> the file where the log output will go. The specified file must be writable.
		/// </summary>
		/// <param name="fileName">The path to the log file. Must be a fully qualified path.</param>
		/// <param name="append">If true will append to fileName. Otherwise will truncate fileName</param>
		/// <remarks>
		/// <para>
		/// Calls <see cref="OpenFile"/> but guarantees not to throw an exception.
		/// Errors are passed to the <see cref="TextWriterAppender.ErrorHandler"/>.
		/// </para>
		/// </remarks>
		virtual protected void SafeOpenFile(string fileName, bool append)
		{
			try 
			{
				OpenFile(fileName, append);
			}
			catch(Exception e) 
			{
				ErrorHandler.Error("OpenFile("+fileName+","+append+") call failed.", e, ErrorCode.FileOpenFailure);
			}
		}

		/// <summary>
		/// Sets and <i>opens</i> the file where the log output will go. The specified file must be writable.
		/// </summary>
		/// <param name="fileName">The path to the log file. Must be a fully qualified path.</param>
		/// <param name="append">If true will append to fileName. Otherwise will truncate fileName</param>
		/// <remarks>
		/// <para>
		/// If there was already an opened file, then the previous file
		/// is closed first.
		/// </para>
		/// <para>
		/// This method will ensure that the directory structure
		/// for the <paramref name="fileName"/> specified exists.
		/// </para>
		/// </remarks>
		virtual protected void OpenFile(string fileName, bool append)
		{
			if (LogLog.IsErrorEnabled)
			{
				// Internal check that the fileName passed in is a rooted path
				bool isPathRooted = false;
				using(SecurityContext.Impersonate(this))
				{
					isPathRooted = Path.IsPathRooted(fileName);
				}
				if (!isPathRooted)
				{
					LogLog.Error("FileAppender: INTERNAL ERROR. OpenFile("+fileName+"): File name is not fully qualified.");
				}
			}

			lock(this)
			{
				Reset();

				LogLog.Debug("FileAppender: Opening file for writing ["+fileName+"] append ["+append+"]");

				// Save these for later, allowing retries if file open fails
				m_fileName = fileName;
				m_appendToFile = append;

				LockingModel.CurrentAppender=this;
				LockingModel.OpenFile(fileName,append,m_encoding);
				m_stream=new LockingStream(LockingModel);

				if (m_stream != null)
				{
					m_stream.AcquireLock();
					try
					{
						SetQWForFiles(new StreamWriter(m_stream, m_encoding));
					}
					finally
					{
						m_stream.ReleaseLock();
					}
				}

				WriteHeader();
			}
		}

		/// <summary>
		/// Sets the quiet writer used for file output
		/// </summary>
		/// <param name="fileStream">the file stream that has been opened for writing</param>
		/// <remarks>
		/// <para>
		/// This implementation of <see cref="SetQWForFiles(Stream)"/> creates a <see cref="StreamWriter"/>
		/// over the <paramref name="fileStream"/> and passes it to the 
		/// <see cref="SetQWForFiles(TextWriter)"/> method.
		/// </para>
		/// <para>
		/// This method can be overridden by sub classes that want to wrap the
		/// <see cref="Stream"/> in some way, for example to encrypt the output
		/// data using a <c>System.Security.Cryptography.CryptoStream</c>.
		/// </para>
		/// </remarks>
		virtual protected void SetQWForFiles(Stream fileStream) 
		{
			SetQWForFiles(new StreamWriter(fileStream, m_encoding));
		}

		/// <summary>
		/// Sets the quiet writer being used.
		/// </summary>
		/// <param name="writer">the writer over the file stream that has been opened for writing</param>
		/// <remarks>
		/// <para>
		/// This method can be overridden by sub classes that want to
		/// wrap the <see cref="TextWriter"/> in some way.
		/// </para>
		/// </remarks>
		virtual protected void SetQWForFiles(TextWriter writer) 
		{
			QuietWriter = new QuietTextWriter(writer, ErrorHandler);
		}

		#endregion Protected Instance Methods

		#region Protected Static Methods

		/// <summary>
		/// Convert a path into a fully qualified path.
		/// </summary>
		/// <param name="path">The path to convert.</param>
		/// <returns>The fully qualified path.</returns>
		/// <remarks>
		/// <para>
		/// Converts the path specified to a fully
		/// qualified path. If the path is relative it is
		/// taken as relative from the application base 
		/// directory.
		/// </para>
		/// </remarks>
		protected static string ConvertToFullPath(string path)
		{
			return SystemInfo.ConvertToFullPath(path);
		}

		#endregion Protected Static Methods

		#region Private Instance Fields

		/// <summary>
		/// Flag to indicate if we should append to the file
		/// or overwrite the file. The default is to append.
		/// </summary>
		private bool m_appendToFile = true;

		/// <summary>
		/// The name of the log file.
		/// </summary>
		private string m_fileName = null;

		/// <summary>
		/// The encoding to use for the file stream.
		/// </summary>
		private Encoding m_encoding = Encoding.Default;

		/// <summary>
		/// The security context to use for privileged calls
		/// </summary>
		private SecurityContext m_securityContext;

		/// <summary>
		/// The stream to log to. Has added locking semantics
		/// </summary>
		private FileAppender.LockingStream m_stream = null;

		/// <summary>
		/// The locking model to use
		/// </summary>
		private FileAppender.LockingModelBase m_lockingModel = new FileAppender.ExclusiveLock();

		#endregion Private Instance Fields
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产91久久久久| 成人丝袜高跟foot| 欧美日精品一区视频| 国产精品欧美一级免费| 国产suv一区二区三区88区| 日韩视频永久免费| 日韩**一区毛片| 欧美日韩精品一二三区| 亚洲一区二区高清| 欧美日韩在线播放三区| 亚洲午夜久久久| 91精品国产综合久久精品图片| 亚洲福利视频导航| 欧美一区二区性放荡片| 免费人成精品欧美精品| 精品粉嫩超白一线天av| 国产精品一二三区在线| 国产精品久久久久久久久免费丝袜| 国产精品66部| 亚洲精品乱码久久久久久日本蜜臀| 色悠悠亚洲一区二区| 亚洲一区二区三区自拍| 欧美日韩电影在线播放| 精品一区二区三区在线观看国产 | 久久精品国产一区二区三区免费看| 欧美一区二区在线看| 国产成a人亚洲| 亚洲综合一区在线| 欧美成人福利视频| 99久久精品国产网站| 午夜精品视频一区| 久久久久高清精品| 欧美日韩国产高清一区二区三区 | 国产精品免费av| 欧美一a一片一级一片| 精品一区二区三区的国产在线播放 | 色狠狠综合天天综合综合| 日韩综合一区二区| 亚洲欧洲日本在线| 精品欧美黑人一区二区三区| 成人黄色av网站在线| 理论片日本一区| 亚洲影院久久精品| 国产亚洲视频系列| 欧美精品1区2区3区| 99国产精品久久| 国产乱码精品一区二区三 | 欧美少妇xxx| www.亚洲国产| 国产精品一二二区| 九一九一国产精品| 日本不卡一区二区| 亚洲无人区一区| 亚洲精品一二三| 亚洲欧洲国产专区| 国产女人水真多18毛片18精品视频 | 在线亚洲欧美专区二区| www.色综合.com| 春色校园综合激情亚洲| 国产一区二区美女| 精品制服美女丁香| 精品一区二区在线看| 另类小说综合欧美亚洲| 九九久久精品视频| 国产一区视频网站| 国产精品69久久久久水密桃| 国产乱码精品一品二品| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 色菇凉天天综合网| 色婷婷国产精品| 欧美三级日韩三级| 91麻豆精品国产91久久久更新时间 | 婷婷丁香久久五月婷婷| 日韩国产在线观看| 国产一区二区三区久久悠悠色av | 欧美精品一卡二卡| 2021久久国产精品不只是精品| 精品久久久久久久久久久久包黑料 | 欧美激情一区二区三区蜜桃视频| 国产精品久线在线观看| 一区二区高清免费观看影视大全| 午夜激情综合网| 国产盗摄一区二区| 色综合色狠狠天天综合色| 欧美网站一区二区| 精品国产一区二区三区久久影院 | 精品国产乱码久久久久久闺蜜| 久久久久久久久久久久电影| 国产精品久久久久久久久免费樱桃 | www成人在线观看| 日韩毛片精品高清免费| 五月婷婷色综合| 成人综合婷婷国产精品久久蜜臀 | 国产精品欧美精品| 日韩精品电影在线| 成人av电影免费观看| 日韩精品资源二区在线| 中文字幕在线不卡| 久久精品国产亚洲高清剧情介绍| 99re热视频这里只精品| 日韩午夜三级在线| 亚洲精品久久7777| 国产成人午夜视频| 久久综合色之久久综合| 日韩在线一区二区| 99精品国产热久久91蜜凸| 日韩欧美一级在线播放| 一区二区三区在线观看网站| 国精产品一区一区三区mba视频| 色综合久久天天综合网| 国产蜜臀97一区二区三区| 久久福利视频一区二区| 欧美精品视频www在线观看 | 亚洲欧美影音先锋| 国产精品1区2区| 亚洲精品一区二区三区福利 | 亚洲天堂免费看| 成人动漫一区二区| 欧美国产亚洲另类动漫| 国产精品白丝jk白祙喷水网站| 日韩一区二区在线看| 视频精品一区二区| 制服视频三区第一页精品| 亚洲va国产天堂va久久en| 欧美日韩在线播放一区| 五月婷婷综合激情| 日韩三级免费观看| 国产精品一区免费视频| 国产色91在线| av亚洲精华国产精华精华| 亚洲美女视频在线观看| 欧美艳星brazzers| 视频一区视频二区中文字幕| 欧美精品电影在线播放| 欧美a一区二区| 26uuu精品一区二区在线观看| 国产成人亚洲综合a∨婷婷图片| 中文幕一区二区三区久久蜜桃| youjizz久久| 丝袜国产日韩另类美女| 欧美大片一区二区| 国产白丝网站精品污在线入口| 欧美韩国一区二区| 欧美日韩一区成人| 久久av中文字幕片| 中文字幕在线免费不卡| 欧美日韩中字一区| 国产精品一区三区| 亚洲国产精品久久一线不卡| 日韩一区二区视频| 成人av网站在线| 青椒成人免费视频| 国产精品久久久爽爽爽麻豆色哟哟| 欧美影视一区二区三区| 毛片av中文字幕一区二区| 国产精品久久久久久久久晋中| 欧美老女人第四色| av午夜一区麻豆| 国产又黄又大久久| 亚洲午夜激情av| 国产欧美一区二区精品婷婷| 欧美日韩另类一区| 成a人片国产精品| 韩国三级电影一区二区| 亚洲制服丝袜av| 中文字幕一区在线观看| 久久久久久久精| 欧美成人猛片aaaaaaa| 欧美日韩日日骚| 色欧美日韩亚洲| jlzzjlzz国产精品久久| 国产一区二区影院| 美国一区二区三区在线播放| 亚洲成人动漫精品| 亚洲色图.com| 成人欧美一区二区三区视频网页| 久久亚洲捆绑美女| 欧美精品一区二区三区一线天视频| 欧美性videosxxxxx| 一本大道久久a久久精二百| 成人精品高清在线| 成人综合激情网| www.日韩av| av不卡在线播放| 91免费版pro下载短视频| jlzzjlzz国产精品久久| 一本大道av伊人久久综合| 色域天天综合网| 欧美色视频在线观看| 欧美三级中文字| 日韩一级高清毛片| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲精品在线网站| 亚洲欧洲99久久| 亚洲综合视频网| 秋霞电影一区二区| 国产福利视频一区二区三区| 成人国产精品免费观看视频| 色综合久久久网| 日韩美一区二区三区|