pictcode / lib / Cake / Log / CakeLog.php @ b3a58ce1
履歴 | 表示 | アノテート | ダウンロード (15.363 KB)
| 1 | 635eef61 | spyder1211 | <?php
 | 
      
|---|---|---|---|
| 2 | /**
 | 
      ||
| 3 |  * Logging.
 | 
      ||
| 4 |  *
 | 
      ||
| 5 |  * Log messages to text files.
 | 
      ||
| 6 |  *
 | 
      ||
| 7 |  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 | 
      ||
| 8 |  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | 
      ||
| 9 |  *
 | 
      ||
| 10 |  * Licensed under The MIT License
 | 
      ||
| 11 |  * For full copyright and license information, please see the LICENSE.txt
 | 
      ||
| 12 |  * Redistributions of files must retain the above copyright notice.
 | 
      ||
| 13 |  *
 | 
      ||
| 14 |  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | 
      ||
| 15 |  * @link          http://cakephp.org CakePHP(tm) Project
 | 
      ||
| 16 |  * @package       Cake.Log
 | 
      ||
| 17 |  * @since         CakePHP(tm) v 0.2.9
 | 
      ||
| 18 |  * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 | 
      ||
| 19 |  */
 | 
      ||
| 20 | |||
| 21 | App::uses('LogEngineCollection', 'Log');  | 
      ||
| 22 | |||
| 23 | /**
 | 
      ||
| 24 |  * Logs messages to configured Log adapters. One or more adapters
 | 
      ||
| 25 |  * can be configured using CakeLogs's methods. If you don't
 | 
      ||
| 26 |  * configure any adapters, and write to the logs a default
 | 
      ||
| 27 |  * FileLog will be autoconfigured for you.
 | 
      ||
| 28 |  *
 | 
      ||
| 29 |  * ### Configuring Log adapters
 | 
      ||
| 30 |  *
 | 
      ||
| 31 |  * You can configure log adapters in your applications `bootstrap.php` file.
 | 
      ||
| 32 |  * A sample configuration would look like:
 | 
      ||
| 33 |  *
 | 
      ||
| 34 |  * ```
 | 
      ||
| 35 |  * CakeLog::config('my_log', array('engine' => 'File'));
 | 
      ||
| 36 |  * ```
 | 
      ||
| 37 |  *
 | 
      ||
| 38 |  * See the documentation on CakeLog::config() for more detail.
 | 
      ||
| 39 |  *
 | 
      ||
| 40 |  * ### Writing to the log
 | 
      ||
| 41 |  *
 | 
      ||
| 42 |  * You write to the logs using CakeLog::write(). See its documentation for more
 | 
      ||
| 43 |  * information.
 | 
      ||
| 44 |  *
 | 
      ||
| 45 |  * ### Logging Levels
 | 
      ||
| 46 |  *
 | 
      ||
| 47 |  * By default CakeLog supports all the log levels defined in
 | 
      ||
| 48 |  * RFC 5424. When logging messages you can either use the named methods,
 | 
      ||
| 49 |  * or the correct constants with `write()`:
 | 
      ||
| 50 |  *
 | 
      ||
| 51 |  * ```
 | 
      ||
| 52 |  * CakeLog::error('Something horrible happened');
 | 
      ||
| 53 |  * CakeLog::write(LOG_ERR, 'Something horrible happened');
 | 
      ||
| 54 |  * ```
 | 
      ||
| 55 |  *
 | 
      ||
| 56 |  * If you require custom logging levels, you can use CakeLog::levels() to
 | 
      ||
| 57 |  * append additional logging levels.
 | 
      ||
| 58 |  *
 | 
      ||
| 59 |  * ### Logging scopes
 | 
      ||
| 60 |  *
 | 
      ||
| 61 |  * When logging messages and configuring log adapters, you can specify
 | 
      ||
| 62 |  * 'scopes' that the logger will handle. You can think of scopes as subsystems
 | 
      ||
| 63 |  * in your application that may require different logging setups. For
 | 
      ||
| 64 |  * example in an e-commerce application you may want to handle logged errors
 | 
      ||
| 65 |  * in the cart and ordering subsystems differently than the rest of the
 | 
      ||
| 66 |  * application. By using scopes you can control logging for each part
 | 
      ||
| 67 |  * of your application and still keep standard log levels.
 | 
      ||
| 68 |  *
 | 
      ||
| 69 |  * See CakeLog::config() and CakeLog::write() for more information
 | 
      ||
| 70 |  * on scopes
 | 
      ||
| 71 |  *
 | 
      ||
| 72 |  * @package       Cake.Log
 | 
      ||
| 73 |  * @link http://book.cakephp.org/2.0/en/core-libraries/logging.html#logging
 | 
      ||
| 74 |  */
 | 
      ||
| 75 | class CakeLog {  | 
      ||
| 76 | |||
| 77 | /**
 | 
      ||
| 78 |  * LogEngineCollection class
 | 
      ||
| 79 |  *
 | 
      ||
| 80 |  * @var LogEngineCollection
 | 
      ||
| 81 |  */
 | 
      ||
| 82 | protected static $_Collection;  | 
      ||
| 83 | |||
| 84 | /**
 | 
      ||
| 85 |  * Default log levels as detailed in RFC 5424
 | 
      ||
| 86 |  * http://tools.ietf.org/html/rfc5424
 | 
      ||
| 87 |  *
 | 
      ||
| 88 |  * @var array
 | 
      ||
| 89 |  */
 | 
      ||
| 90 | protected static $_defaultLevels = array(  | 
      ||
| 91 | 'emergency' => LOG_EMERG,  | 
      ||
| 92 | 'alert' => LOG_ALERT,  | 
      ||
| 93 | 'critical' => LOG_CRIT,  | 
      ||
| 94 | 'error' => LOG_ERR,  | 
      ||
| 95 | 'warning' => LOG_WARNING,  | 
      ||
| 96 | 'notice' => LOG_NOTICE,  | 
      ||
| 97 | 'info' => LOG_INFO,  | 
      ||
| 98 | 'debug' => LOG_DEBUG,  | 
      ||
| 99 | );  | 
      ||
| 100 | |||
| 101 | /**
 | 
      ||
| 102 |  * Active log levels for this instance.
 | 
      ||
| 103 |  *
 | 
      ||
| 104 |  * @var array
 | 
      ||
| 105 |  */
 | 
      ||
| 106 | protected static $_levels;  | 
      ||
| 107 | |||
| 108 | /**
 | 
      ||
| 109 |  * Mapped log levels
 | 
      ||
| 110 |  *
 | 
      ||
| 111 |  * @var array
 | 
      ||
| 112 |  */
 | 
      ||
| 113 | protected static $_levelMap;  | 
      ||
| 114 | |||
| 115 | /**
 | 
      ||
| 116 |  * initialize ObjectCollection
 | 
      ||
| 117 |  *
 | 
      ||
| 118 |  * @return void
 | 
      ||
| 119 |  */
 | 
      ||
| 120 | protected static function _init() {  | 
      ||
| 121 | static::$_levels = static::defaultLevels();  | 
      ||
| 122 | static::$_Collection = new LogEngineCollection();  | 
      ||
| 123 | }  | 
      ||
| 124 | |||
| 125 | /**
 | 
      ||
| 126 |  * Configure and add a new logging stream to CakeLog
 | 
      ||
| 127 |  * You can use add loggers from app/Log/Engine use app.loggername, or any
 | 
      ||
| 128 |  * plugin/Log/Engine using plugin.loggername.
 | 
      ||
| 129 |  *
 | 
      ||
| 130 |  * ### Usage:
 | 
      ||
| 131 |  *
 | 
      ||
| 132 |  * ```
 | 
      ||
| 133 |  * CakeLog::config('second_file', array(
 | 
      ||
| 134 |  *     'engine' => 'File',
 | 
      ||
| 135 |  *     'path' => '/var/logs/my_app/'
 | 
      ||
| 136 |  * ));
 | 
      ||
| 137 |  * ```
 | 
      ||
| 138 |  *
 | 
      ||
| 139 |  * Will configure a FileLog instance to use the specified path.
 | 
      ||
| 140 |  * All options that are not `engine` are passed onto the logging adapter,
 | 
      ||
| 141 |  * and handled there. Any class can be configured as a logging
 | 
      ||
| 142 |  * adapter as long as it implements the methods in CakeLogInterface.
 | 
      ||
| 143 |  *
 | 
      ||
| 144 |  * ### Logging levels
 | 
      ||
| 145 |  *
 | 
      ||
| 146 |  * When configuring loggers, you can set which levels a logger will handle.
 | 
      ||
| 147 |  * This allows you to disable debug messages in production for example:
 | 
      ||
| 148 |  *
 | 
      ||
| 149 |  * ```
 | 
      ||
| 150 |  * CakeLog::config('default', array(
 | 
      ||
| 151 |  *     'engine' => 'File',
 | 
      ||
| 152 |  *     'path' => LOGS,
 | 
      ||
| 153 |  *     'levels' => array('error', 'critical', 'alert', 'emergency')
 | 
      ||
| 154 |  * ));
 | 
      ||
| 155 |  * ```
 | 
      ||
| 156 |  *
 | 
      ||
| 157 |  * The above logger would only log error messages or higher. Any
 | 
      ||
| 158 |  * other log messages would be discarded.
 | 
      ||
| 159 |  *
 | 
      ||
| 160 |  * ### Logging scopes
 | 
      ||
| 161 |  *
 | 
      ||
| 162 |  * When configuring loggers you can define the active scopes the logger
 | 
      ||
| 163 |  * is for. If defined only the listed scopes will be handled by the
 | 
      ||
| 164 |  * logger. If you don't define any scopes an adapter will catch
 | 
      ||
| 165 |  * all scopes that match the handled levels.
 | 
      ||
| 166 |  *
 | 
      ||
| 167 |  * ```
 | 
      ||
| 168 |  * CakeLog::config('payments', array(
 | 
      ||
| 169 |  *     'engine' => 'File',
 | 
      ||
| 170 |  *     'types' => array('info', 'error', 'warning'),
 | 
      ||
| 171 |  *     'scopes' => array('payment', 'order')
 | 
      ||
| 172 |  * ));
 | 
      ||
| 173 |  * ```
 | 
      ||
| 174 |  *
 | 
      ||
| 175 |  * The above logger will only capture log entries made in the
 | 
      ||
| 176 |  * `payment` and `order` scopes. All other scopes including the
 | 
      ||
| 177 |  * undefined scope will be ignored. Its important to remember that
 | 
      ||
| 178 |  * when using scopes you must also define the `types` of log messages
 | 
      ||
| 179 |  * that a logger will handle. Failing to do so will result in the logger
 | 
      ||
| 180 |  * catching all log messages even if the scope is incorrect.
 | 
      ||
| 181 |  *
 | 
      ||
| 182 |  * @param string $key The keyname for this logger, used to remove the
 | 
      ||
| 183 |  *    logger later.
 | 
      ||
| 184 |  * @param array $config Array of configuration information for the logger
 | 
      ||
| 185 |  * @return bool success of configuration.
 | 
      ||
| 186 |  * @throws CakeLogException
 | 
      ||
| 187 |  * @link http://book.cakephp.org/2.0/en/core-libraries/logging.html#creating-and-configuring-log-streams
 | 
      ||
| 188 |  */
 | 
      ||
| 189 | public static function config($key, $config) {  | 
      ||
| 190 | if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $key)) {  | 
      ||
| 191 | throw new CakeLogException(__d('cake_dev', 'Invalid key name'));  | 
      ||
| 192 | }  | 
      ||
| 193 | if (empty($config['engine'])) {  | 
      ||
| 194 | throw new CakeLogException(__d('cake_dev', 'Missing logger class name'));  | 
      ||
| 195 | }  | 
      ||
| 196 | if (empty(static::$_Collection)) {  | 
      ||
| 197 |                         static::_init();
 | 
      ||
| 198 | }  | 
      ||
| 199 | static::$_Collection->load($key, $config);  | 
      ||
| 200 | return true;  | 
      ||
| 201 | }  | 
      ||
| 202 | |||
| 203 | /**
 | 
      ||
| 204 |  * Returns the keynames of the currently active streams
 | 
      ||
| 205 |  *
 | 
      ||
| 206 |  * @return array Array of configured log streams.
 | 
      ||
| 207 |  */
 | 
      ||
| 208 | public static function configured() {  | 
      ||
| 209 | if (empty(static::$_Collection)) {  | 
      ||
| 210 |                         static::_init();
 | 
      ||
| 211 | }  | 
      ||
| 212 | return static::$_Collection->loaded();  | 
      ||
| 213 | }  | 
      ||
| 214 | |||
| 215 | /**
 | 
      ||
| 216 |  * Gets/sets log levels
 | 
      ||
| 217 |  *
 | 
      ||
| 218 |  * Call this method without arguments, eg: `CakeLog::levels()` to obtain current
 | 
      ||
| 219 |  * level configuration.
 | 
      ||
| 220 |  *
 | 
      ||
| 221 |  * To append additional level 'user0' and 'user1' to to default log levels:
 | 
      ||
| 222 |  *
 | 
      ||
| 223 |  * ```
 | 
      ||
| 224 |  * CakeLog::levels(array('user0, 'user1'));
 | 
      ||
| 225 |  * // or
 | 
      ||
| 226 |  * CakeLog::levels(array('user0, 'user1'), true);
 | 
      ||
| 227 |  * ```
 | 
      ||
| 228 |  *
 | 
      ||
| 229 |  * will result in:
 | 
      ||
| 230 |  *
 | 
      ||
| 231 |  * ```
 | 
      ||
| 232 |  * array(
 | 
      ||
| 233 |  *     0 => 'emergency',
 | 
      ||
| 234 |  *     1 => 'alert',
 | 
      ||
| 235 |  *     ...
 | 
      ||
| 236 |  *     8 => 'user0',
 | 
      ||
| 237 |  *     9 => 'user1',
 | 
      ||
| 238 |  * );
 | 
      ||
| 239 |  * ```
 | 
      ||
| 240 |  *
 | 
      ||
| 241 |  * To set/replace existing configuration, pass an array with the second argument
 | 
      ||
| 242 |  * set to false.
 | 
      ||
| 243 |  *
 | 
      ||
| 244 |  * ```
 | 
      ||
| 245 |  * CakeLog::levels(array('user0, 'user1'), false);
 | 
      ||
| 246 |  * ```
 | 
      ||
| 247 |  *
 | 
      ||
| 248 |  * will result in:
 | 
      ||
| 249 |  *
 | 
      ||
| 250 |  * ```
 | 
      ||
| 251 |  * array(
 | 
      ||
| 252 |  *      0 => 'user0',
 | 
      ||
| 253 |  *      1 => 'user1',
 | 
      ||
| 254 |  * );
 | 
      ||
| 255 |  * ```
 | 
      ||
| 256 |  *
 | 
      ||
| 257 |  * @param array $levels array
 | 
      ||
| 258 |  * @param bool $append true to append, false to replace
 | 
      ||
| 259 |  * @return array Active log levels
 | 
      ||
| 260 |  */
 | 
      ||
| 261 | public static function levels($levels = array(), $append = true) {  | 
      ||
| 262 | if (empty(static::$_Collection)) {  | 
      ||
| 263 |                         static::_init();
 | 
      ||
| 264 | }  | 
      ||
| 265 | if (empty($levels)) {  | 
      ||
| 266 | return static::$_levels;  | 
      ||
| 267 | }  | 
      ||
| 268 | $levels = array_values($levels);  | 
      ||
| 269 | if ($append) {  | 
      ||
| 270 | static::$_levels = array_merge(static::$_levels, $levels);  | 
      ||
| 271 |                 } else {
 | 
      ||
| 272 | static::$_levels = $levels;  | 
      ||
| 273 | }  | 
      ||
| 274 | static::$_levelMap = array_flip(static::$_levels);  | 
      ||
| 275 | return static::$_levels;  | 
      ||
| 276 | }  | 
      ||
| 277 | |||
| 278 | /**
 | 
      ||
| 279 |  * Reset log levels to the original value
 | 
      ||
| 280 |  *
 | 
      ||
| 281 |  * @return array Default log levels
 | 
      ||
| 282 |  */
 | 
      ||
| 283 | public static function defaultLevels() {  | 
      ||
| 284 | static::$_levelMap = static::$_defaultLevels;  | 
      ||
| 285 | static::$_levels = array_flip(static::$_levelMap);  | 
      ||
| 286 | return static::$_levels;  | 
      ||
| 287 | }  | 
      ||
| 288 | |||
| 289 | /**
 | 
      ||
| 290 |  * Removes a stream from the active streams. Once a stream has been removed
 | 
      ||
| 291 |  * it will no longer have messages sent to it.
 | 
      ||
| 292 |  *
 | 
      ||
| 293 |  * @param string $streamName Key name of a configured stream to remove.
 | 
      ||
| 294 |  * @return void
 | 
      ||
| 295 |  */
 | 
      ||
| 296 | public static function drop($streamName) {  | 
      ||
| 297 | if (empty(static::$_Collection)) {  | 
      ||
| 298 |                         static::_init();
 | 
      ||
| 299 | }  | 
      ||
| 300 | static::$_Collection->unload($streamName);  | 
      ||
| 301 | }  | 
      ||
| 302 | |||
| 303 | /**
 | 
      ||
| 304 |  * Checks whether $streamName is enabled
 | 
      ||
| 305 |  *
 | 
      ||
| 306 |  * @param string $streamName to check
 | 
      ||
| 307 |  * @return bool
 | 
      ||
| 308 |  * @throws CakeLogException
 | 
      ||
| 309 |  */
 | 
      ||
| 310 | public static function enabled($streamName) {  | 
      ||
| 311 | if (empty(static::$_Collection)) {  | 
      ||
| 312 |                         static::_init();
 | 
      ||
| 313 | }  | 
      ||
| 314 | if (!isset(static::$_Collection->{$streamName})) {  | 
      ||
| 315 | throw new CakeLogException(__d('cake_dev', 'Stream %s not found', $streamName));  | 
      ||
| 316 | }  | 
      ||
| 317 | return static::$_Collection->enabled($streamName);  | 
      ||
| 318 | }  | 
      ||
| 319 | |||
| 320 | /**
 | 
      ||
| 321 |  * Enable stream. Streams that were previously disabled
 | 
      ||
| 322 |  * can be re-enabled with this method.
 | 
      ||
| 323 |  *
 | 
      ||
| 324 |  * @param string $streamName to enable
 | 
      ||
| 325 |  * @return void
 | 
      ||
| 326 |  * @throws CakeLogException
 | 
      ||
| 327 |  */
 | 
      ||
| 328 | public static function enable($streamName) {  | 
      ||
| 329 | if (empty(static::$_Collection)) {  | 
      ||
| 330 |                         static::_init();
 | 
      ||
| 331 | }  | 
      ||
| 332 | if (!isset(static::$_Collection->{$streamName})) {  | 
      ||
| 333 | throw new CakeLogException(__d('cake_dev', 'Stream %s not found', $streamName));  | 
      ||
| 334 | }  | 
      ||
| 335 | static::$_Collection->enable($streamName);  | 
      ||
| 336 | }  | 
      ||
| 337 | |||
| 338 | /**
 | 
      ||
| 339 |  * Disable stream. Disabling a stream will
 | 
      ||
| 340 |  * prevent that log stream from receiving any messages until
 | 
      ||
| 341 |  * its re-enabled.
 | 
      ||
| 342 |  *
 | 
      ||
| 343 |  * @param string $streamName to disable
 | 
      ||
| 344 |  * @return void
 | 
      ||
| 345 |  * @throws CakeLogException
 | 
      ||
| 346 |  */
 | 
      ||
| 347 | public static function disable($streamName) {  | 
      ||
| 348 | if (empty(static::$_Collection)) {  | 
      ||
| 349 |                         static::_init();
 | 
      ||
| 350 | }  | 
      ||
| 351 | if (!isset(static::$_Collection->{$streamName})) {  | 
      ||
| 352 | throw new CakeLogException(__d('cake_dev', 'Stream %s not found', $streamName));  | 
      ||
| 353 | }  | 
      ||
| 354 | static::$_Collection->disable($streamName);  | 
      ||
| 355 | }  | 
      ||
| 356 | |||
| 357 | /**
 | 
      ||
| 358 |  * Gets the logging engine from the active streams.
 | 
      ||
| 359 |  *
 | 
      ||
| 360 |  * @param string $streamName Key name of a configured stream to get.
 | 
      ||
| 361 |  * @return mixed instance of BaseLog or false if not found
 | 
      ||
| 362 |  * @see BaseLog
 | 
      ||
| 363 |  */
 | 
      ||
| 364 | public static function stream($streamName) {  | 
      ||
| 365 | if (empty(static::$_Collection)) {  | 
      ||
| 366 |                         static::_init();
 | 
      ||
| 367 | }  | 
      ||
| 368 | if (!empty(static::$_Collection->{$streamName})) {  | 
      ||
| 369 | return static::$_Collection->{$streamName};  | 
      ||
| 370 | }  | 
      ||
| 371 | return false;  | 
      ||
| 372 | }  | 
      ||
| 373 | |||
| 374 | /**
 | 
      ||
| 375 |  * Writes the given message and type to all of the configured log adapters.
 | 
      ||
| 376 |  * Configured adapters are passed both the $type and $message variables. $type
 | 
      ||
| 377 |  * is one of the following strings/values.
 | 
      ||
| 378 |  *
 | 
      ||
| 379 |  * ### Types:
 | 
      ||
| 380 |  *
 | 
      ||
| 381 |  * -  LOG_EMERG => 'emergency',
 | 
      ||
| 382 |  * -  LOG_ALERT => 'alert',
 | 
      ||
| 383 |  * -  LOG_CRIT => 'critical',
 | 
      ||
| 384 |  * - `LOG_ERR` => 'error',
 | 
      ||
| 385 |  * - `LOG_WARNING` => 'warning',
 | 
      ||
| 386 |  * - `LOG_NOTICE` => 'notice',
 | 
      ||
| 387 |  * - `LOG_INFO` => 'info',
 | 
      ||
| 388 |  * - `LOG_DEBUG` => 'debug',
 | 
      ||
| 389 |  *
 | 
      ||
| 390 |  * ### Usage:
 | 
      ||
| 391 |  *
 | 
      ||
| 392 |  * Write a message to the 'warning' log:
 | 
      ||
| 393 |  *
 | 
      ||
| 394 |  * `CakeLog::write('warning', 'Stuff is broken here');`
 | 
      ||
| 395 |  *
 | 
      ||
| 396 |  * @param int|string $type Type of message being written. When value is an integer
 | 
      ||
| 397 |  *    or a string matching the recognized levels, then it will
 | 
      ||
| 398 |  *    be treated log levels. Otherwise it's treated as scope.
 | 
      ||
| 399 |  * @param string $message Message content to log
 | 
      ||
| 400 |  * @param string|array $scope The scope(s) a log message is being created in.
 | 
      ||
| 401 |  *    See CakeLog::config() for more information on logging scopes.
 | 
      ||
| 402 |  * @return bool Success
 | 
      ||
| 403 |  * @link http://book.cakephp.org/2.0/en/core-libraries/logging.html#writing-to-logs
 | 
      ||
| 404 |  */
 | 
      ||
| 405 | public static function write($type, $message, $scope = array()) {  | 
      ||
| 406 | if (empty(static::$_Collection)) {  | 
      ||
| 407 |                         static::_init();
 | 
      ||
| 408 | }  | 
      ||
| 409 | |||
| 410 | if (is_int($type) && isset(static::$_levels[$type])) {  | 
      ||
| 411 | $type = static::$_levels[$type];  | 
      ||
| 412 | }  | 
      ||
| 413 | if (is_string($type) && empty($scope) && !in_array($type, static::$_levels)) {  | 
      ||
| 414 | $scope = $type;  | 
      ||
| 415 | }  | 
      ||
| 416 | $logged = false;  | 
      ||
| 417 | foreach (static::$_Collection->enabled() as $streamName) {  | 
      ||
| 418 | $logger = static::$_Collection->{$streamName};  | 
      ||
| 419 | $types = $scopes = $config = array();  | 
      ||
| 420 | if (method_exists($logger, 'config')) {  | 
      ||
| 421 | $config = $logger->config();  | 
      ||
| 422 | }  | 
      ||
| 423 | if (isset($config['types'])) {  | 
      ||
| 424 | $types = $config['types'];  | 
      ||
| 425 | }  | 
      ||
| 426 | if (isset($config['scopes'])) {  | 
      ||
| 427 | $scopes = $config['scopes'];  | 
      ||
| 428 | }  | 
      ||
| 429 | $inScope = (count(array_intersect((array)$scope, $scopes)) > 0);  | 
      ||
| 430 | $correctLevel = in_array($type, $types);  | 
      ||
| 431 | |||
| 432 |                         if (
 | 
      ||
| 433 |                                 // No config is a catch all (bc mode)
 | 
      ||
| 434 | (empty($types) && empty($scopes)) ||  | 
      ||
| 435 |                                 // BC layer for mixing scope & level
 | 
      ||
| 436 | (in_array($type, $scopes)) ||  | 
      ||
| 437 |                                 // no scopes, but has level
 | 
      ||
| 438 | (empty($scopes) && $correctLevel) ||  | 
      ||
| 439 |                                 // exact scope + level
 | 
      ||
| 440 | ($correctLevel && $inScope)  | 
      ||
| 441 |                         ) {
 | 
      ||
| 442 | $logger->write($type, $message);  | 
      ||
| 443 | $logged = true;  | 
      ||
| 444 | }  | 
      ||
| 445 | }  | 
      ||
| 446 | return $logged;  | 
      ||
| 447 | }  | 
      ||
| 448 | |||
| 449 | /**
 | 
      ||
| 450 |  * Convenience method to log emergency messages
 | 
      ||
| 451 |  *
 | 
      ||
| 452 |  * @param string $message log message
 | 
      ||
| 453 |  * @param string|array $scope The scope(s) a log message is being created in.
 | 
      ||
| 454 |  *    See CakeLog::config() for more information on logging scopes.
 | 
      ||
| 455 |  * @return bool Success
 | 
      ||
| 456 |  */
 | 
      ||
| 457 | public static function emergency($message, $scope = array()) {  | 
      ||
| 458 | return static::write(static::$_levelMap['emergency'], $message, $scope);  | 
      ||
| 459 | }  | 
      ||
| 460 | |||
| 461 | /**
 | 
      ||
| 462 |  * Convenience method to log alert messages
 | 
      ||
| 463 |  *
 | 
      ||
| 464 |  * @param string $message log message
 | 
      ||
| 465 |  * @param string|array $scope The scope(s) a log message is being created in.
 | 
      ||
| 466 |  *    See CakeLog::config() for more information on logging scopes.
 | 
      ||
| 467 |  * @return bool Success
 | 
      ||
| 468 |  */
 | 
      ||
| 469 | public static function alert($message, $scope = array()) {  | 
      ||
| 470 | return static::write(static::$_levelMap['alert'], $message, $scope);  | 
      ||
| 471 | }  | 
      ||
| 472 | |||
| 473 | /**
 | 
      ||
| 474 |  * Convenience method to log critical messages
 | 
      ||
| 475 |  *
 | 
      ||
| 476 |  * @param string $message log message
 | 
      ||
| 477 |  * @param string|array $scope The scope(s) a log message is being created in.
 | 
      ||
| 478 |  *    See CakeLog::config() for more information on logging scopes.
 | 
      ||
| 479 |  * @return bool Success
 | 
      ||
| 480 |  */
 | 
      ||
| 481 | public static function critical($message, $scope = array()) {  | 
      ||
| 482 | return static::write(static::$_levelMap['critical'], $message, $scope);  | 
      ||
| 483 | }  | 
      ||
| 484 | |||
| 485 | /**
 | 
      ||
| 486 |  * Convenience method to log error messages
 | 
      ||
| 487 |  *
 | 
      ||
| 488 |  * @param string $message log message
 | 
      ||
| 489 |  * @param string|array $scope The scope(s) a log message is being created in.
 | 
      ||
| 490 |  *    See CakeLog::config() for more information on logging scopes.
 | 
      ||
| 491 |  * @return bool Success
 | 
      ||
| 492 |  */
 | 
      ||
| 493 | public static function error($message, $scope = array()) {  | 
      ||
| 494 | return static::write(static::$_levelMap['error'], $message, $scope);  | 
      ||
| 495 | }  | 
      ||
| 496 | |||
| 497 | /**
 | 
      ||
| 498 |  * Convenience method to log warning messages
 | 
      ||
| 499 |  *
 | 
      ||
| 500 |  * @param string $message log message
 | 
      ||
| 501 |  * @param string|array $scope The scope(s) a log message is being created in.
 | 
      ||
| 502 |  *    See CakeLog::config() for more information on logging scopes.
 | 
      ||
| 503 |  * @return bool Success
 | 
      ||
| 504 |  */
 | 
      ||
| 505 | public static function warning($message, $scope = array()) {  | 
      ||
| 506 | return static::write(static::$_levelMap['warning'], $message, $scope);  | 
      ||
| 507 | }  | 
      ||
| 508 | |||
| 509 | /**
 | 
      ||
| 510 |  * Convenience method to log notice messages
 | 
      ||
| 511 |  *
 | 
      ||
| 512 |  * @param string $message log message
 | 
      ||
| 513 |  * @param string|array $scope The scope(s) a log message is being created in.
 | 
      ||
| 514 |  *    See CakeLog::config() for more information on logging scopes.
 | 
      ||
| 515 |  * @return bool Success
 | 
      ||
| 516 |  */
 | 
      ||
| 517 | public static function notice($message, $scope = array()) {  | 
      ||
| 518 | return static::write(static::$_levelMap['notice'], $message, $scope);  | 
      ||
| 519 | }  | 
      ||
| 520 | |||
| 521 | /**
 | 
      ||
| 522 |  * Convenience method to log debug messages
 | 
      ||
| 523 |  *
 | 
      ||
| 524 |  * @param string $message log message
 | 
      ||
| 525 |  * @param string|array $scope The scope(s) a log message is being created in.
 | 
      ||
| 526 |  *    See CakeLog::config() for more information on logging scopes.
 | 
      ||
| 527 |  * @return bool Success
 | 
      ||
| 528 |  */
 | 
      ||
| 529 | public static function debug($message, $scope = array()) {  | 
      ||
| 530 | return static::write(static::$_levelMap['debug'], $message, $scope);  | 
      ||
| 531 | }  | 
      ||
| 532 | |||
| 533 | /**
 | 
      ||
| 534 |  * Convenience method to log info messages
 | 
      ||
| 535 |  *
 | 
      ||
| 536 |  * @param string $message log message
 | 
      ||
| 537 |  * @param string|array $scope The scope(s) a log message is being created in.
 | 
      ||
| 538 |  *    See CakeLog::config() for more information on logging scopes.
 | 
      ||
| 539 |  * @return bool Success
 | 
      ||
| 540 |  */
 | 
      ||
| 541 | public static function info($message, $scope = array()) {  | 
      ||
| 542 | return static::write(static::$_levelMap['info'], $message, $scope);  | 
      ||
| 543 | }  | 
      ||
| 544 | |||
| 545 | }  |