Skip to content
Extraits de code Groupes Projets
Log.php 7,59 ko
Newer Older
  • Learn to ignore specific revisions
  •  * Piwik - free/libre analytics platform
    
    robocoder's avatar
    robocoder a validé
     * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
    
    use Monolog\Logger;
    
    use Piwik\Container\StaticContainer;
    
    use Psr\Log\LoggerInterface;
    
     * Log entries are made with a message and log level. The logging utility will tag each
     * log entry with the name of the plugin that's doing the logging. If no plugin is found,
     * the name of the current class is used.
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
     * You can log messages using one of the public static functions (eg, 'error', 'warning',
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
     * Currently, Piwik supports the following logging backends:
    
     * - **screen**: logging to the screen
     * - **file**: logging to a file
     * - **database**: logging to Piwik's MySQL database
    
     * Messages logged in the console will always be logged to the console output.
     *
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
     * The logging utility can be configured by manipulating the INI config options in the
    
     * The following configuration options can be set:
    
     * - `log_writers[]`: This is an array of log writer IDs. The three log writers provided
     *                    by Piwik core are **file**, **screen** and **database**. You can
     *                    get more by installing plugins. The default value is **screen**.
     * - `log_level`: The current log level. Can be **ERROR**, **WARN**, **INFO**, **DEBUG**,
     *                or **VERBOSE**. Log entries made with a log level that is as or more
     *                severe than the current log level will be outputted. Others will be
     *                ignored. The default level is **WARN**.
     * - `logger_file_path`: For the file log writer, specifies the path to the log file
     *                       to log to or a path to a directory to store logs in. If a
     *                       directory, the file name is piwik.log. Can be relative to
     *                       Piwik's root dir or an absolute path. Defaults to **tmp/logs**.
    
     *
     * @deprecated Inject and use Psr\Log\LoggerInterface instead of this class.
     * @see \Psr\Log\LoggerInterface
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        // log levels
        const NONE = 0;
        const ERROR = 1;
        const WARN = 2;
        const INFO = 3;
        const DEBUG = 4;
        const VERBOSE = 5;
    
        // config option names
        const LOG_LEVEL_CONFIG_OPTION = 'log_level';
        const LOG_WRITERS_CONFIG_OPTION = 'log_writers';
        const LOGGER_FILE_PATH_CONFIG_OPTION = 'logger_file_path';
    
        const STRING_MESSAGE_FORMAT_OPTION = 'string_message_format';
    
        /**
         * The backtrace string to use when testing.
         *
         * @var string
         */
        public static $debugBacktraceForTests;
    
    
        /**
         * Singleton instance.
         *
         * @var Log
         */
        private static $instance;
    
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        /**
    
         * @var LoggerInterface
    
        private $logger;
    
        public static function getInstance()
        {
            if (self::$instance === null) {
    
                self::$instance = StaticContainer::get(__CLASS__);
    
            }
            return self::$instance;
        }
        public static function unsetInstance()
        {
            self::$instance = null;
        }
        public static function setSingletonInstance($instance)
    
         * @param LoggerInterface $logger
    
        public function __construct(LoggerInterface $logger)
    
            $this->logger = $logger;
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        }
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        /**
         * Logs a message using the ERROR log level.
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
         * @param string $message The log message. This can be a sprintf format string.
         * @param ... mixed Optional sprintf params.
    
         *
         * @deprecated Inject and call Psr\Log\LoggerInterface::error() instead.
         * @see \Psr\Log\LoggerInterface::error()
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
         */
        public static function error($message /* ... */)
    
            self::logMessage(Logger::ERROR, $message, array_slice(func_get_args(), 1));
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        }
    
        /**
         * Logs a message using the WARNING log level.
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
         * @param string $message The log message. This can be a sprintf format string.
         * @param ... mixed Optional sprintf params.
    
         *
         * @deprecated Inject and call Psr\Log\LoggerInterface::warning() instead.
         * @see \Psr\Log\LoggerInterface::warning()
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
         */
        public static function warning($message /* ... */)
        {
    
            self::logMessage(Logger::WARNING, $message, array_slice(func_get_args(), 1));
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        }
    
        /**
         * Logs a message using the INFO log level.
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
         * @param string $message The log message. This can be a sprintf format string.
         * @param ... mixed Optional sprintf params.
    
         *
         * @deprecated Inject and call Psr\Log\LoggerInterface::info() instead.
         * @see \Psr\Log\LoggerInterface::info()
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
         */
        public static function info($message /* ... */)
        {
    
            self::logMessage(Logger::INFO, $message, array_slice(func_get_args(), 1));
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        }
    
        /**
         * Logs a message using the DEBUG log level.
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
         * @param string $message The log message. This can be a sprintf format string.
         * @param ... mixed Optional sprintf params.
    
         *
         * @deprecated Inject and call Psr\Log\LoggerInterface::debug() instead.
         * @see \Psr\Log\LoggerInterface::debug()
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
         */
        public static function debug($message /* ... */)
        {
    
            self::logMessage(Logger::DEBUG, $message, array_slice(func_get_args(), 1));
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        }
    
        /**
         * Logs a message using the VERBOSE log level.
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
         * @param string $message The log message. This can be a sprintf format string.
         * @param ... mixed Optional sprintf params.
    
         *
         * @deprecated Inject and call Psr\Log\LoggerInterface::debug() instead (the verbose level doesn't exist in the PSR standard).
         * @see \Psr\Log\LoggerInterface::debug()
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
         */
        public static function verbose($message /* ... */)
        {
    
            self::logMessage(Logger::DEBUG, $message, array_slice(func_get_args(), 1));
    
         * @deprecated Will be removed, log levels are now applied on each Monolog handler.
    
         * @deprecated Will be removed, log levels are now applied on each Monolog handler.
    
        private function doLog($level, $message, $parameters = array())
    
            // To ensure the compatibility with PSR-3, the message must be a string
            if ($message instanceof \Exception) {
                $parameters['exception'] = $message;
                $message = $message->getMessage();
            }
    
            if (is_object($message) || is_array($message) || is_resource($message)) {
    
                $this->logger->warning('Trying to log a message that is not a string', array(
    
                    'exception' => new \InvalidArgumentException('Trying to log a message that is not a string')
    
            $this->logger->log($level, $message, $parameters);
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        }
    
        private static function logMessage($level, $message, $parameters)
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        {
    
            self::getInstance()->doLog($level, $message, $parameters);
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        }
    
        public static function getMonologLevel($level)
    
        {
            switch ($level) {
                case self::ERROR:
                    return Logger::ERROR;
                case self::WARN:
                    return Logger::WARNING;
                case self::INFO:
                    return Logger::INFO;
                case self::DEBUG:
                    return Logger::DEBUG;
                case self::VERBOSE:
                    return Logger::DEBUG;
                case self::NONE:
                default:
                    // Highest level possible, need to do better in the future...
                    return Logger::EMERGENCY;
            }
        }