php, snippets

MyPearLogComposite

04.24.09 | Comment?

Pubblico una classe per effettuare il log composito con PEAR::Log.
In sviluppo il log potrà essere usato in maniera abbondante (entrata/uscita dei metodi ad esempio). Questo causerà frequenti accessi al file di log.
In produzione la maschera impostata nello switch eviterà l’accesso al file per i log di tipo PEAR_LOG_DEBUG (valore di default) ma manterrà i log di tipo ERROR e i log di tipo EMERG.
In più per il log di tipo EMERG verrà inviata una mail. Il metodo _rotate della classe garantirà una rotazione del file al raggiungimento di N bytes (vedi costante LOG_SIZE_ROTATION).


set_include_path(dirname(__FILE__) .'/lib/PEAR-1.7.2/:'.get_include_path());

require_once(dirname(__FILE__) . '/lib/PEAR-1.7.2/PEAR.php');
require_once(dirname(__FILE__) . '/lib/Log-1.11.3/Log.php');
require_once(dirname(__FILE__) . '/lib/Mail-1.2.0b1/Mail.php');

$env = 1;
switch($env){
	case 0://development
		define('MASK_ERROR', PEAR_LOG_DEBUG);
	break;
	case 1://production
		define('MASK_ERROR', PEAR_LOG_ERR);
	break;
}
define('APPLICATION_NAME', 'mylog');
define('MAIL_MASK_ERROR', PEAR_LOG_EMERG);
define('MAIL_WEBMASTER', 'MAILTO');
define('MAIL_FROM', 'MAILFROM');
define('LOG_FILE', dirname(__FILE__) . '/logs/'.APPLICATION_NAME.'.txt');
define('LOG_SIZE_ROTATION',1000000);

class MyPearLogComposite{

	public $logger;

	public function __construct(){
		$this->_check_rotate();
		$conf = array('mode' => 0600, 'timeFormat' => '%X %x');
		$file = &Log::singleton('file', LOG_FILE, APPLICATION_NAME , $conf);
		$mask = Log::MAX(MASK_ERROR);
		$file->setMask($mask);
		$conf = array('from' => MAIL_FROM,'subject' => APPLICATION_NAME . ' Important log events');
		$mail = &Log::singleton('mail', MAIL_WEBMASTER, APPLICATION_NAME, $conf);
		$mask = Log::MAX(MAIL_MASK_ERROR);
		$mail->setMask($mask);
		$this->logger = &Log::singleton('composite');
		$this->logger->addChild($file);
		$this->logger->addChild($mail);
	}
	private function _check_rotate(){
		$size = @filesize(LOG_FILE);
		if($size > LOG_SIZE_ROTATION)
        	$this->_rotate();

	}
	private function _rotate(){
		$file = LOG_FILE . '.' . date('Y-m-d');
        rename(LOG_FILE, $file);
	}
}

$log = new MyPearLogComposite();

$log->logger->log('log something');
$log->logger->log('log log');
$log->logger->log('log error', PEAR_LOG_ERR);
$log->logger->log('emergency', PEAR_LOG_EMERG);

//in development
//log file:
/*
12:32:30 24/04/2009 mylog [info] log something
12:32:30 24/04/2009 mylog [info] log log
12:32:30 24/04/2009 mylog [error] log error
12:32:30 24/04/2009 mylog [emergency] emergency
*/
//mail:
/*
To: MAILTO
Subject: mylog Important log events
From: MAILFROM
User-Agent: PEAR Log Package
Apr 24 12:40:25 mylog [emergency] emergency
*/

//in production
//log file:
/*
12:42:25 04/24/09 mylog [error] log error
12:42:25 04/24/09 mylog [emergency] emergency
*/
//mail:
/*
To: MAILTO
Subject: mylog Important log events
From: MAILFROM
User-Agent: PEAR Log Package
Apr 24 12:42:25 mylog [emergency] emergency
*/

Popularity: 1% [?]

Post a Comment

Your email is never shared. Required fields are marked *

*
*