. * */ class MonologProvider { private static $instance = null; public $aWorkspaces = null; public $formatter; public $streamRoutating; public $registerLogger; //the default format "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"; public $output = "<%level%> %datetime% %channel% %level_name%: %message% %context% %extra%\n"; public $dateFormat = "M d H:i:s"; public $numOfKeepFiles = 60; public $levelDebug = 100; public $bubble = true; public $filePermission = 0666; public function __construct ($channel, $fileLog) { //Set Formatter $this->formatter = new Monolog\Formatter\LineFormatter($this->output, $this->dateFormat); //Set Routating Handler $this->streamRoutating = new Monolog\Handler\RotatingFileHandler($fileLog, $this->numOfKeepFiles, $this->levelDebug, $this->bubble, $this->filePermission); $this->streamRoutating->setFormatter($this->formatter); //Create the channel and register the Logger with StreamRoutating $this->registerLogger = new Monolog\Logger($channel); $this->registerLogger->pushProcessor(new Monolog\Processor\IntrospectionProcessor()); $this->registerLogger->pushHandler($this->streamRoutating); } /** * to get singleton instance * * @access public * @return object */ public function getSingleton ($channel, $fileLog) { if (self::$instance == null) { self::$instance = new MonologProvider($channel, $fileLog); } else { self::$instance->setConfig($channel, $fileLog); } return self::$instance; } /** * Set channel and fileLog * * @access public * @return object */ public function setConfig ($channel, $fileLog) { //Set Routating Handler $this->streamRoutating = new Monolog\Handler\RotatingFileHandler($fileLog, $this->numOfKeepFiles, $this->levelDebug, $this->bubble, $this->filePermission); $this->streamRoutating->setFormatter($this->formatter); //Create the channel and register the Logger with StreamRoutating $this->registerLogger = new Monolog\Logger($channel); $this->registerLogger->pushProcessor(new Monolog\Processor\IntrospectionProcessor()); $this->registerLogger->pushHandler($this->streamRoutating); } /** * to register log * * @access public * @return void */ public function addLog ($level, $message, $context) { switch ($level) { case 100://DEBUG $this->registerLogger->addDebug($message, $context); break; case 200://INFO $this->registerLogger->addInfo($message, $context); break; case 250://NOTICE $this->registerLogger->addNotice($message, $context); break; case 300://WARNING $this->registerLogger->addWarning($message, $context); break; case 400://ERROR $this->registerLogger->addError($message, $context); break; case 500://CRITICAL $this->registerLogger->addCritical($message, $context); break; case 550://ALERT $this->registerLogger->addAlert($message, $context); break; case 600://EMERGENCY $this->registerLogger->addEmergency($message, $context); break; default: $this->registerLogger->addDebug($message, $context); } } }