Conectando com o logger

May 16, 2024 · View on GitHub

Yii DB usa PSR-3 para registro. Você pode configurar um criador de logs que implemente Psr\Log\LoggerInterface::class no Contêiner DI.

No exemplo a seguir, você configura Yii Logging Library com um arquivo como destino.

Crie um arquivo config/common/di/logger.php:

use Psr\Log\LoggerInterface;
use Yiisoft\Definitions\ReferencesArray;
use Yiisoft\Log\Logger;
use Yiisoft\Log\Target\File\FileTarget;

return [
    LoggerInterface::class => [
        'class' => Logger::class,
        '__construct()' => [
            'targets' => ReferencesArray::from([FileTarget::class]),
        ],
    ],
];

Dependendo do SGBD utilizado, crie um arquivo com configuração da conexão com o banco de dados. Por exemplo, ao usar PostgreSQL, será config/common/di/db-pgsql.php:

use Psr\Log\LoggerInterface;
use Yiisoft\Db\Connection\ConnectionInterface;
use Yiisoft\Db\Pgsql\Connection;
use Yiisoft\Db\Pgsql\Driver;
use Yiisoft\Definitions\Reference;

/** @var array $params */

return [
    ConnectionInterface::class => [
        'class' => Connection::class,
        '__construct()' => [
            'driver' => new Driver(
                $params['yiisoft/db-pgsql']['dsn'],
                $params['yiisoft/db-pgsql']['username'],
                $params['yiisoft/db-pgsql']['password'],
            ),
        ],
        'setLogger()' => [Reference::to(LoggerInterface::class)],        
    ],
];

Para outros DBMS, consulte a seção "Criar conexão".

Uso avançado do Logger

Se você precisar redefinir mensagens do logger ou aumentar/diminuir o nível de registro:

  1. Crie uma classe de logger personalizada
  2. Use o contexto para detectar o tipo da mensagem no método “log”
use Yiisoft\Db\Driver\Pdo\LogType;

class MyLogger extends ParentLoggerClass implements LoggerInterface
{
    public function log($level, string|\Stringable $message, array $context = []): void
    {
        if ($context['type'] === LogType::QUERY) {
            ... your logic here
        }    
    }
    
    // implements other methods of LoggerInterface without changes
}