mnabialek / laravel-sql-logger

Log SQL queries for Laravel/Lumen framework
MIT License
156 stars 24 forks source link

Unsupported driver exception when used custom connection driver #8

Closed DoctorLines closed 6 years ago

DoctorLines commented 6 years ago

Hi! Good package)

Trouble case:

Thats in the AppServiceProvider class:

public function register()
{
    Connection::resolverFor('mariadb', function ($connection, $database, $prefix, $config) {
        return new MariaDbConnection($connection, $database, $prefix, $config);
    });
}

In database.php config file:

        'mysql' => [
            'driver'      => 'mariadb',
            'host'        => env('DB_HOST', '127.0.0.1'),
            ...
            ...

Then try to php artisan package:discover

Result: Exception In ConnectionFactory.php line 286: Unsupported driver [mariadb]

laravel.log (see: # 5 and # 6 lines in stack)

[2017-12-03 01:32:27] development.ERROR: Unsupported driver [mariadb] {"exception":"[object] (InvalidArgumentException(code: 0): Unsupported driver [mariadb] at /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php:286)
[stacktrace]
#0 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(77): Illuminate\\Database\\Connectors\\ConnectionFactory->createConnection('mariadb', Object(Closure), 'seismo-api-test', '', Array)
#1 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(51): Illuminate\\Database\\Connectors\\ConnectionFactory->createSingleConnection(Array)
#2 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(119): Illuminate\\Database\\Connectors\\ConnectionFactory->make(Array, 'mysql')
#3 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(74): Illuminate\\Database\\DatabaseManager->makeConnection('mysql')
#4 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(327): Illuminate\\Database\\DatabaseManager->connection()
#5 /var/www/srss-api/www/vendor/mnabialek/laravel-sql-logger/src/Providers/ServiceProvider.php(43): Illuminate\\Database\\DatabaseManager->__call('listen', Array)
#6 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(586): Mnabialek\\LaravelSqlLogger\\Providers\\ServiceProvider->register()
#7 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php(75): Illuminate\\Foundation\\Application->register(Object(Mnabialek\\LaravelSqlLogger\\Providers\\ServiceProvider))
#8 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(561): Illuminate\\Foundation\\ProviderRepository->load(Array)
#9 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterProviders.php(17): Illuminate\\Foundation\\Application->registerConfiguredProviders()
#10 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(213): Illuminate\\Foundation\\Bootstrap\\RegisterProviders->bootstrap(Object(Illuminate\\Foundation\\Application))
#11 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(296): Illuminate\\Foundation\\Application->bootstrapWith(Array)
#12 /var/www/srss-api/www/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(119): Illuminate\\Foundation\\Console\\Kernel->bootstrap()
#13 /var/www/srss-api/www/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#14 {main

Exception because AppServiceProvider was loaded after Mnabialek\LaravelSqlLogger\Providers\ServiceProvider

A temporary solution for me: Add a line protected $defer = true; in Mnabialek\LaravelSqlLogger\Providers\ServiceProvider

DoctorLines commented 6 years ago

Better solution:

  1. In composer.json set dont-discover:
    "extra": {
    "laravel": {
      "dont-discover": [
        "mnabialek/laravel-sql-logger"
      ]
  2. Register logger provider manually in AppServiceProvider
    $this->app->register(\Mnabialek\LaravelSqlLogger\Providers\ServiceProvider::class);

    this issue can be closed now)