<?php /** * Logging. * * Log messages to text files. * * PHP versions 4 and 5 * * CakePHP(tm) : Rapid Development Framework (http://www.cakephp.org) * Copyright 2005-2009, Cake Software Foundation, Inc. (http://www.cakefoundation.org) * * Licensed under The MIT License * Redistributions of files must retain the above copyright notice. * * @filesource * @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://www.cakefoundation.org) * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project * @package cake * @subpackage cake.cake.libs * @since CakePHP(tm) v 0.2.9 * @license http://www.opensource.org/licenses/mit-license.php The MIT License */ /** * Included libraries. * */ if (!class_exists('File')) { require LIBS . 'file.php'; } /** * Set up error level constants to be used within the framework if they are not defined within the * system. * */ if (!defined('LOG_WARNING')) { define('LOG_WARNING', 3); } if (!defined('LOG_NOTICE')) { define('LOG_NOTICE', 4); } if (!defined('LOG_DEBUG')) { define('LOG_DEBUG', 5); } if (!defined('LOG_INFO')) { define('LOG_INFO', 6); } /** * Logs messages to text files * * @package cake * @subpackage cake.cake.libs */ class CakeLog { /** * Writes given message to a log file in the logs directory. * * @param string $type Type of log, becomes part of the log's filename * @param string $msg Message to log * @return boolean Success * @access public * @static */ function write($type, $msg) { if (!defined('LOG_ERROR')) { define('LOG_ERROR', 2); } if (!defined('LOG_ERR')) { define('LOG_ERR', LOG_ERROR); } $levels = array( LOG_WARNING => 'warning', LOG_NOTICE => 'notice', LOG_INFO => 'info', LOG_DEBUG => 'debug', LOG_ERR => 'error', LOG_ERROR => 'error' ); if (is_int($type) && isset($levels[$type])) { $type = $levels[$type]; } if ($type == 'error' || $type == 'warning') { $filename = LOGS . 'error.log'; } elseif (in_array($type, $levels)) { $filename = LOGS . 'debug.log'; } else { $filename = LOGS . $type . '.log'; } $output = date('Y-m-d H:i:s') . ' ' . ucfirst($type) . ': ' . $msg . "\n"; $log = new File($filename, true); if ($log->writable()) { return $log->append($output); } } /** * An error_handler that will log errors to file using CakeLog::write(); * * @param integer $code Code of error * @param string $description Error description * @param string $file File on which error occurred * @param integer $line Line that triggered the error * @param array $context Context * @return void **/ function handleError($code, $description, $file = null, $line = null, $context = null) { if ($code === 2048 || $code === 8192) { return; } switch ($code) { case E_PARSE: case E_ERROR: case E_CORE_ERROR: case E_COMPILE_ERROR: case E_USER_ERROR: $error = 'Fatal Error'; $level = LOG_ERROR; break; case E_WARNING: case E_USER_WARNING: case E_COMPILE_WARNING: case E_RECOVERABLE_ERROR: $error = 'Warning'; $level = LOG_WARNING; break; case E_NOTICE: case E_USER_NOTICE: $error = 'Notice'; $level = LOG_NOTICE; break; default: return; break; } $message = $error . ' (' . $code . '): ' . $description . ' in [' . $file . ', line ' . $line . ']'; CakeLog::write($level, $message); } } if (!defined('DISABLE_DEFAULT_ERROR_HANDLING')) { set_error_handler(array('CakeLog', 'handleError')); } ?>