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.php
e 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()
e 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()
e 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.php
e pronto.
Abra o app/Providers/AppServiceProvider.php
arquivo 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.log
arquivo. O usuário pode visualizar diretamente suas consultas neste query.log
arquivo.
No Laravel, há mais uma forma de registrar as consultas. Desta forma, seus logs de consulta são armazenados dentro do storage/logs/laravel.log
arquivo. Para fazer isso, você precisa colocar o código abaixo em seu routes/web.php
arquivo.
\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