Вход Регистрация
Файл: symfony-2.7/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php
Строк: 92
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyBridgeDoctrineLogger;

use 
PsrLogLoggerInterface;
use 
SymfonyComponentStopwatchStopwatch;
use 
DoctrineDBALLoggingSQLLogger;

/**
 * DbalLogger.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class DbalLogger implements SQLLogger
{
    const 
MAX_STRING_LENGTH 32;
    const 
BINARY_DATA_VALUE '(binary value)';

    protected 
$logger;
    protected 
$stopwatch;

    
/**
     * Constructor.
     *
     * @param LoggerInterface $logger    A LoggerInterface instance
     * @param Stopwatch       $stopwatch A Stopwatch instance
     */
    
public function __construct(LoggerInterface $logger nullStopwatch $stopwatch null)
    {
        
$this->logger $logger;
        
$this->stopwatch $stopwatch;
    }

    
/**
     * {@inheritdoc}
     */
    
public function startQuery($sql, array $params null, array $types null)
    {
        if (
null !== $this->stopwatch) {
            
$this->stopwatch->start('doctrine''doctrine');
        }

        if (
is_array($params)) {
            foreach (
$params as $index => $param) {
                if (!
is_string($params[$index])) {
                    continue;
                }

                
// non utf-8 strings break json encoding
                
if (!preg_match('//u'$params[$index])) {
                    
$params[$index] = self::BINARY_DATA_VALUE;
                    continue;
                }

                
// detect if the too long string must be shorten
                
if (function_exists('mb_strlen')) {
                    if (
self::MAX_STRING_LENGTH mb_strlen($params[$index], 'UTF-8')) {
                        
$params[$index] = mb_substr($params[$index], 0self::MAX_STRING_LENGTH 6'UTF-8').' [...]';
                        continue;
                    }
                } else {
                    if (
self::MAX_STRING_LENGTH strlen($params[$index])) {
                        
$params[$index] = substr($params[$index], 0self::MAX_STRING_LENGTH 6).' [...]';
                        continue;
                    }
                }
            }
        }

        if (
null !== $this->logger) {
            
$this->log($sqlnull === $params ? array() : $params);
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function stopQuery()
    {
        if (
null !== $this->stopwatch) {
            
$this->stopwatch->stop('doctrine');
        }
    }

    
/**
     * Logs a message.
     *
     * @param string $message A message to log
     * @param array  $params  The context
     */
    
protected function log($message, array $params)
    {
        
$this->logger->debug($message$params);
    }
}
Онлайн: 3
Реклама