<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
		<head>
			<!-- template designed by Marco Von Ballmoos  -->
			<title>Docs For Class LoggerException</title>
			<link rel="stylesheet" href="../media/stylesheet.css" />
						<script src="../media/lib/classTree.js"></script>
												<script language="javascript" type="text/javascript">
				var imgPlus = new Image();
				var imgMinus = new Image();
				imgPlus.src = "../media/images/plus.png";
				imgMinus.src = "../media/images/minus.png";
				
				function showNode(Node){
							switch(navigator.family){
								case 'nn4':
									// Nav 4.x code fork...
							var oTable = document.layers["span" + Node];
							var oImg = document.layers["img" + Node];
									break;
								case 'ie4':
									// IE 4/5 code fork...
							var oTable = document.all["span" + Node];
							var oImg = document.all["img" + Node];
									break;
								case 'gecko':
									// Standards Compliant code fork...
							var oTable = document.getElementById("span" + Node);
							var oImg = document.getElementById("img" + Node);
									break;
							}
					oImg.src = imgMinus.src;
					oTable.style.display = "block";
				}
				
				function hideNode(Node){
							switch(navigator.family){
								case 'nn4':
									// Nav 4.x code fork...
							var oTable = document.layers["span" + Node];
							var oImg = document.layers["img" + Node];
									break;
								case 'ie4':
									// IE 4/5 code fork...
							var oTable = document.all["span" + Node];
							var oImg = document.all["img" + Node];
									break;
								case 'gecko':
									// Standards Compliant code fork...
							var oTable = document.getElementById("span" + Node);
							var oImg = document.getElementById("img" + Node);
									break;
							}
					oImg.src = imgPlus.src;
					oTable.style.display = "none";
				}
				
				function nodeIsVisible(Node){
							switch(navigator.family){
								case 'nn4':
									// Nav 4.x code fork...
							var oTable = document.layers["span" + Node];
									break;
								case 'ie4':
									// IE 4/5 code fork...
							var oTable = document.all["span" + Node];
									break;
								case 'gecko':
									// Standards Compliant code fork...
							var oTable = document.getElementById("span" + Node);
									break;
							}
					return (oTable && oTable.style.display == "block");
				}
				
				function toggleNodeVisibility(Node){
					if (nodeIsVisible(Node)){
						hideNode(Node);
					}else{
						showNode(Node);
					}
				}
			</script>
					</head>
		<body>
			<div class="page-body">			
<h2 class="class-name">Class LoggerException</h2>

<a name="sec-description"></a>
<div class="info-box">
	<div class="info-box-title">Description</div>
	<div class="nav-bar">
					<span class="disabled">Description</span> |
													<a href="#sec-vars">Vars</a>
						|											<a href="#sec-methods">Methods</a>
						
					</div>
	<div class="info-box-body">
        		<!-- ========== Info from phpDoc block ========= -->
<p class="short-description">LoggerException class</p>
	<ul class="tags">
				<li><span class="field">version:</span> $Revision: 771547 $</li>
			</ul>
		<p class="notes">
			Located in <a class="field" href="_LoggerException.php.html">/LoggerException.php</a> (line <span class="field">27</span>)
		</p>
		
				
		<pre>Exception
   |
   --LoggerException</pre>
	
			</div>
</div>





	<a name="sec-vars"></a>
	<div class="info-box">
		<div class="info-box-title">Variables</div>
		<div class="nav-bar">
			<a href="#sec-description">Description</a> |
										<span class="disabled">Vars</span>
						
			
										| 
									<a href="#sec-methods">Methods</a>
							
					</div>
		<div class="info-box-body">
										<h4>Inherited Variables</h4>
				<A NAME='inherited_vars'><!-- --></A>
									<p>Inherited from <span class="classname">Exception (Internal Class)</span></p>
					<blockquote>
													<span class="var-title">
								<span class="var-name">$code</span><br>
							</span>
													<span class="var-title">
								<span class="var-name">$file</span><br>
							</span>
													<span class="var-title">
								<span class="var-name">$line</span><br>
							</span>
													<span class="var-title">
								<span class="var-name">$message</span><br>
							</span>
													<span class="var-title">
								<span class="var-name">$previous</span><br>
							</span>
													<span class="var-title">
								<span class="var-name">$string</span><br>
							</span>
													<span class="var-title">
								<span class="var-name">$trace</span><br>
							</span>
											</blockquote> 
										
		</div>
	</div>
	
	<a name="sec-methods"></a>
	<div class="info-box">
		<div class="info-box-title">Methods</div>
		<div class="nav-bar">
			<a href="#sec-description">Description</a> |
															<a href="#sec-vars">Vars</a>
																	<span class="disabled">Methods</span>
						
		</div>
		<div class="info-box-body">
			<A NAME='method_detail'></A>
							<h4>Inherited Methods</h4>
				<a name='inherited_methods'><!-- --></a>	
									<!-- =========== Summary =========== -->
					<p>Inherited From <span class="classname">Exception (Internal Class)</span></p>
					<blockquote>
													<span class="method-name">constructor __construct ( [$message = ], [$code = ], [$previous = ] )</span><br>
													<span class="method-name">getCode (  )</span><br>
													<span class="method-name">getFile (  )</span><br>
													<span class="method-name">getLine (  )</span><br>
													<span class="method-name">getMessage (  )</span><br>
													<span class="method-name">getPrevious (  )</span><br>
													<span class="method-name">getTrace (  )</span><br>
													<span class="method-name">getTraceAsString (  )</span><br>
													<span class="method-name">__clone (  )</span><br>
													<span class="method-name">__toString (  )</span><br>
											</blockquote>
										
		</div>
	</div>


	<p class="notes" id="credit">
		Documentation generated on Sat, 18 Feb 2012 22:32:24 +0000 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
	</p>
	</div></body>
</html>