logger = Logger::getInstance('siteexport');
}
/**
* Debug Level
* the level of what should be logged during the proxied session.
* To activate the logging, you have to enter a loglevel below 5 (see below) to log
* to the screen. If you use the debugFile option the logstream will be rerouted
* to this file.
*
* Default: 5 / No logging
*
* Available DEBUG Levels:
* 5 = off - only socket exceptions will be shown to avoid blank pages
* 4 = ERROR - Log errors of the proxy process
* 3 = WARN - Log warnings during the proxy process
* 2 = INFO - Log information about the ongoing connection process
* 1 = DEBUG - detailed log about variable states
* 0 = VERBOSE - Additionally logs the reponse body from the server
*
* @param $level
*/
public function setDebugLevel($level = 5)
{
$this->debugLevel = $level;
}
public function debugLevel()
{
return $this->debugLevel;
}
/**
* Set a valid and writeable filename to have the debug information written into a file
* Set the debugLevel below 5 to enable the debugging.
*
* e.g. $CC->debugFile = '/temp/ccproxy.txt';
* e.g. $CC->debugFile = 'C:\temp\ccproxy.txt';
*/
public function setDebugFile($file = null)
{
if (!$file || empty($file))
{
$file = null;
}
$this->debugFile = $file;
}
public function firstRE()
{
return $this->firstRE;
}
/**
* print debug info to file if exists
*/
public function message($info,$var=null,$level=4){
$ajaxCanLog = $this->isAJAX && $level == 4;
$fh = false;
if( $this->debugLevel > $level && !$ajaxCanLog ) return; // only log certain Debug Levels
switch($level) {
case 4: $this->logger->error( $info, $var ); break;
case 3: $this->logger->log( $info, $var ); break;
case 2: $this->logger->log( $info, $var ); break;
case 1: $this->logger->debug( $info, $var ); break;
default: $TYPE = " NONE"; break;
}
if ( empty($this->debugFile) ) {
$this->runtimeException("DebugFile not properly configured. Make sure, it is set, readable and writable. We suggest to use a file in the DokuWiki's media directory.", true);
$this->debugLevel = 5; // shutdown debug
} else {
$fh = @fopen($this->debugFile, "a+");
if ( !$fh && !$ajaxCanLog ) {
$this->runtimeException("Could not create/open/append logfile: '{$this->debugFile}'", true);
$this->debugLevel = 5; // shutdown debug
return;
}
}
switch($level) {
case 4: $TYPE = "ERROR"; break;
case 3: $TYPE = " WARN"; break;
case 2: $TYPE = " INFO"; break;
case 1: $TYPE = "DEBUG"; break;
default: $TYPE = " NONE"; break;
}
$prepend = "[" . (date('Y-m-d H:i:s') ?: "") . " $TYPE] ";
$log = $prepend . str_replace("\n", "\n" . $prepend . "\t", trim($info)) . "\n";
if ( $fh !== false ) {
fwrite($fh, $log);
}
if ( $ajaxCanLog ) {
if ( !headers_sent() ) {
header("HTTP/1.0 500 Internal Server Error", true, 500);
header("Status: 500 Internal Server Error", true, 500);
}
echo $log;
}
if ( !empty($var) ) {
if ( is_array($var) ) {
ob_start();
print_r($var);
$content = ob_get_contents();
ob_end_clean();
} else {
$content = $var;
}
$log = $prepend . "\t" . str_replace("\n", "\n" . $prepend . "\t", str_replace("\r\n", "\n", trim($content))) . "\n";
if ( $fh ) {
fwrite($fh, $log);
}
if ( $ajaxCanLog ) {
echo $log;
}
}
if ( $fh ) {
fclose($fh);
}
}
public function runtimeException($message, $wasDebug=false) {
if ( empty($message) ) { return; }
if ( !$this->isAJAX ) {
ob_start();
} else if ( !headers_sent() ) {
header("HTTP/1.0 500 Internal Server Error", true, 500);
header("Status: 500 Internal Server Error", true, 500);
}
if ( !$this->isAJAX ) {
if ( $this->firstRE ) {
print 'Runtime Error' . "\n";
}
print ''.$message.'
' . "\n";
if ( $this->firstRE ) {
print 'If this error persists, please contact the server administrator.
' . "\n";
}
} else {
if ( !$wasDebug ) {
$this->message('Runtime Error: ' . $message, null, 4);
} else {
print 'Runtime Error: ' . $message . "\n";
}
}
$this->firstRE = false;
if (!$this->isAJAX) {
$this->runtimeErrors .= ob_get_contents();
ob_end_clean();
}
return;
}
}