Do not speak Portuguese? Translate this site with Google or Bing Translator
Laravel - How to log all Eloquent Queries

Posted on: August 09, 2020 02:29 PM

Posted by: Renato

Categories: Laravel query eloquent sql

Views: 3553

Neste post, vou mostrar a você um método simples para registrar cada execução do Eloquent Query do seu aplicativo. Vamos registrar as consultas no storage/logs/laravel.log arquivo.

Para registrar consultas de banco de dados, vamos adicionar uma lista de chamadas de banco de dados, conforme mostrado no exemplo abaixo. Abra o seu app/Providers/AppServiceProvider.phpe adicione o seguinte código ao boot()método:

namespace  App \ Providers ;

use  Illuminate \ Support \ ServiceProvider ;
use  Illuminate \ Support \ Facades \ Schema ;
use  DB ;
use  Log ;

classe  AppServiceProvider  estende  ServiceProvider
 {
     inicialização de função pública  ( )
     {
        Schema :: defaultStringLength ( 191 );

        DB :: listen ( function ( $ query ) {
            Log :: info (
                $ query-> sql,
                $ query-> bindings,
                $ query-> time
            );
        });
    }

Dados de registro de exemplo

[2017/12/04 18:57:33] local.INFO: seleccione * a partir  `tasks`   
[ 2017 -12 -04  18 : 57 : 33 ] local.INFO: seleccione  contagem (*) como  agregado  de  ` tasks`   
[ 2017 -12 -04  18 : 57 : 33 ] local.INFO: select * from  `tasks`  limite  15  offset  0  
 
 

Quer imprimir a consulta no Laravel? Ou em outras palavras, você deseja registrar consultas no Laravel? Ambas as perguntas têm respostas ligeiramente diferentes. Para imprimir a consulta, você pode apenas imprimir a última consulta executada e exibi-la em um navegador. Mas eu recomendo que você registre a consulta no Laravel. Ao fazer isso, todas as suas consultas serão salvas no arquivo de log e você poderá visualizá-lo a qualquer momento.

Neste artigo, mostro as duas opções que ajudam o usuário a visualizar as consultas em seu aplicativo Laravel.

Quando você está desenvolvendo um aplicativo Laravel, às vezes você pode se deparar com uma situação em que precisa ver se a consulta escrita está correta ou não. Isso ocorre por vários motivos - talvez os usuários não estejam obtendo uma saída esperada, você esteja obtendo uma resposta lenta de um servidor de banco de dados ou não obtenha nenhuma saída como algo errado com sua consulta, etc. Em todos esses cenários, se você estiver registrando a consulta, isso ajudará a depurar o problema.

Como Imprimir Consulta no Laravel?

Imprimir a última consulta executada é um processo único. Você pode precisar apenas imprimir sua consulta no navegador. Ele não armazena a consulta em nenhum lugar. Abaixo está um exemplo simples para imprimir sua consulta no Laravel.

 

DB::enableQueryLog();

$arr_user = DB::table('users')->select('name', 'email as user_email')->get();

dd(DB::getQueryLog());

Aqui, usei duas declarações DB::enableQueryLog()dd(DB::getQueryLog())A primeira instrução ativa o log de consultas, enquanto a segunda instrução realmente imprime esse log no navegador. Esta técnica de depuração também funciona com o Laravel Eloquent.

 

Pode-se usar este método se não quiser registrar consultas. Mas, como disse antes, essa não é realmente uma maneira conveniente. Porque, se você seguir essa técnica, você precisará repetir essas duas instruções DB::enableQueryLog()dd(DB::getQueryLog())para cada consulta.

A melhor opção é registrar todas as consultas no arquivo de log.

Consulta de Log no Laravel

Eu recomendo uma técnica de registro de consultas no Laravel. É uma maneira mais fácil e conveniente para os desenvolvedores. Você não precisa ir ao local de cada consulta e escrever o código para registro.

Em vez disso, você só precisa editar AppServiceProvider.phpe pronto.

Abra o app/Providers/AppServiceProvider.phparquivo e adicione 2 Facades para 'File' e 'DB' como segue.

use Illuminate\Support\Facades\File;

use Illuminate\Support\Facades\DB;

A seguir, no boot()método escreva um código abaixo que irá registrar todas as suas consultas do Laravel em background.

public function boot()

{

    if(env('APP_DEBUG')) {

        DB::listen(function($query) {

            File::append(

                storage_path('/logs/query.log'),

                $query->sql . ' [' . implode(', ', $query->bindings) . ']' . PHP_EOL

           );

        });

    }

}

 

 

Agora, sempre que uma consulta for executada, ela será registrada automaticamente no storage/logs/query.logarquivo. O usuário pode visualizar diretamente suas consultas neste query.logarquivo.

No Laravel, há mais uma forma de registrar as consultas. Desta forma, seus logs de consulta são armazenados dentro do storage/logs/laravel.logarquivo. Para fazer isso, você precisa colocar o código abaixo em seu routes/web.phparquivo.

 

\DB::listen(function($sql) {

    \Log::info($sql->sql);

    \Log::info($sql->bindings);

    \Log::info($sql->time);

});

É isso aí! Agora, depende de você usar um dos métodos acima para registrar as consultas. Você não precisa usar os dois métodos ao mesmo tempo.

É tudo sobre como registrar as consultas no Laravel. Espero que este artigo seja útil para sua aplicação.

Query Log Laravel, saiba o que acontece por trás dos “panos”.

Conhecendo o método getQueryLog()

Esse método está disponível desde a versão 4.2 do Laravel, ou seja não é nenhuma novidade, mas muitos desenvolvedores desconhecem. O que ele faz é muito simples; ele gera um log completo com informações muito interessantes sobre o comportamento de uma query, para usar é simples, observe logo abaixo:

<?php

namespace API\Repositories;

use API\Repositories\Contracts\WorkoutPlanRepositoryInterface;
use API\WorkoutPlan;
use Illuminate\Support\Facades\Validator;
use DB;

final class WorkoutPlanRepository extends BaseRepository implements WorkoutPlanRepositoryInterface
{
    public function workoutPlanByUser($id)
    {
        DB::enableQueryLog();
        
        $workoutPlansByUser = WorkoutPlan::with('user', 'workoutType')
            ->where('fk_user', $id)
            ->get();
             
        dd(DB::getQueryLog());
    }
}

Na linha 8 “chamamos” a facade DB, na linha 14 habilitamos o query log e por fim na linha 20 verificamos a saída em tela do que acontece na query por meio da já conhecida função dd() que funciona como um var_dump() com um die() do PHP.

Fontes:

https://arjunphp.com/laravel-5-5-log-eloquent-queries/

https://artisansweb.net/how-to-log-query-in-laravel/

https://medium.com/@geek.com/query-log-laravel-saiba-o-que-acontece-por-tr%C3%A1s-dos-panos-4e699a0ae656

 


3

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 1 Comments
  • Willa
    Willa - há 3 anos
    Amazing! Its in fact awesome article, I have got much clear idea on the topic of from tgis piece of writing. https://blog.storymirror.com/read/qwxegice/persuasive-essay-against-abortion Customized Composing Providers custom writing service custom writing service

Blog Search


Categories

OUTROS (15) Variados (109) PHP (130) Laravel (157) Black Hat (3) front-end (28) linux (111) postgresql (39) Docker (25) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (54) devops (25) nodejs (5) npm (2) nvm (1) git (8) firefox (1) react (6) reactnative (5) collections (1) javascript (6) reactjs (7) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (0) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (11) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (4) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (1) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (37) Kubernetes (2) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (4) security (2) translate (1) kube (1) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (2) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (2) Architecture (3) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (1) autorizacao (2) authentication (4) authorization (2) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1)

New Articles



Get Latest Updates by Email