From 4e7cd204dcc12e60ef9e4ecb75deeb4c4b742550 Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Sun, 13 Jun 2010 04:49:31 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=B0=20trunk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit +YUCHENG HU+ git-svn-id: https://svn.code.sf.net/p/hawebs/svn@249 a2543c7e-f6e9-4f8a-8bff-1ffc34733512 --- oss/vtiger/trunk/log4php/LoggerManager.php | 133 ++++++++++++++++++ .../log4php/LoggerPropertyConfigurator.php | 65 +++++++++ 2 files changed, 198 insertions(+) create mode 100644 oss/vtiger/trunk/log4php/LoggerManager.php create mode 100644 oss/vtiger/trunk/log4php/LoggerPropertyConfigurator.php diff --git a/oss/vtiger/trunk/log4php/LoggerManager.php b/oss/vtiger/trunk/log4php/LoggerManager.php new file mode 100644 index 00000000..f5a0ec9d --- /dev/null +++ b/oss/vtiger/trunk/log4php/LoggerManager.php @@ -0,0 +1,133 @@ +getConfigInfo($name); + return new Logger($name, $configinfo); + } +} + +/** + * Core logging class. + */ +class Logger { + private $name = false; + private $appender = false; + private $configinfo = false; + + /** + * Writing log file information could cost in-terms of performance. + * Enable logging based on the levels here explicitly + */ + private $enableLogLevel = array( + 'ERROR' => false, + 'FATAL' => false, + 'INFO' => false, + 'WARN' => false, + 'DEBUG' => false, + ); + + function __construct($name, $configinfo = false) { + $this->name = $name; + $this->configinfo = $configinfo; + + /** For migration log-level we need debug turned-on */ + if(strtoupper($name) == 'MIGRATION') { + $this->enableLogLevel['DEBUG'] = true; + } + + } + + function emit($level, $message) { + if(!$this->appender) { + $filename = 'logs/vtigercrm.log'; + if($this->configinfo && isset($this->configinfo['appender']['File'])) { + $filename = $this->configinfo['appender']['File']; + } + $this->appender = new LoggerAppenderFile($filename, 0777); + } + $mypid = @getmypid(); + + $this->appender->emit("$level [$mypid] $this->name - ", $message); + } + + function info($message) { + if($this->isLevelEnabled('INFO')) { + $this->emit('INFO', $message); + } + } + + function debug($message) { + if($this->isDebugEnabled()) { + $this->emit('DEBUG', $message); + } + } + + function warn($message) { + if($this->isLevelEnabled('WARN')) { + $this->emit('WARN', $message); + } + } + + function fatal($message) { + if($this->isLevelEnabled('FATAL')) { + $this->emit('FATAL', $message); + } + } + + function error($message) { + if($this->isLevelEnabled('ERROR')) { + $this->emit('ERROR', $message); + } + } + + function isLevelEnabled($level) { + if($this->enableLogLevel[$level] && $this->configinfo) { + return (strtoupper($this->configinfo['level']) == $level); + } + return false; + } + + function isDebugEnabled() { + return $this->isLevelEnabled('DEBUG'); + } +} + +/** + * Log message appender to file. + */ +class LoggerAppenderFile { + + private $filename; + private $chmod; + + function __construct($filename, $chmod = 0222) { + $this->filename = $filename; + $this->chmod = $chmod; + } + + function emit($prefix, $message) { + if($this->chmod != 0777 && file_exists($this->filename)) { + if(is_readable($this->filename)) { + @chmod($this->filename, $this->chmod); + } + } + $fh = @fopen($this->filename, 'a'); + if($fh) { + @fwrite($fh, date('m/d/Y H:i:s') . " $prefix $message\n"); + @fclose($fh); + } + } + +} +?> \ No newline at end of file diff --git a/oss/vtiger/trunk/log4php/LoggerPropertyConfigurator.php b/oss/vtiger/trunk/log4php/LoggerPropertyConfigurator.php new file mode 100644 index 00000000..9d79bd98 --- /dev/null +++ b/oss/vtiger/trunk/log4php/LoggerPropertyConfigurator.php @@ -0,0 +1,65 @@ +$v) { + if(preg_match("/log4php.rootLogger/i", $k, $m)) { + $name = 'ROOT'; + list($level, $appender) = explode(',', $v); + $types[$name]['level'] = $level; + $types[$name]['appender'] = $appender; + } + if(preg_match("/log4php.logger.(.*)/i", $k, $m)) { + $name = $m[1]; + list($level, $appender) = explode(',', $v); + $types[$name]['level'] = $level; + $types[$name]['appender'] = $appender; + } + if(preg_match("/log4php.appender.([^.]+).?(.*)/i", $k, $m)) { + $appenders[$m[1]][$m[2]] = $v; + } + + } + + $this->types = $types; + $this->appenders = $appenders; + } + + function getConfigInfo($type) { + if(isset($this->types[$type])) { + $typeinfo = $this->types[$type]; + return array ( + 'level' => $typeinfo['level'], + 'appender'=> $this->appenders[$typeinfo['appender']] + + ); + } + return false; + } + + static function getInstance() { + return self::$singleton; + } +} +?>