Ich möchte laravel Abfragen protokollieren. Ich weiß, dass wir zu Laravel Abfragen mit dem folgenden Code hören:Listen Laravel 'illuminate.query' Ereignisse in Handwerker Konsole Befehle
Event::listen('illuminate.query', function ($query, $bindings, $time, $name) {
// Log queries
};
Ich mag würde in einem Handwerker Befehl obigen Code zu platzieren, so dass ich nur auf Anfragen hören, wenn dieses Programm ausgeführt wird, und nicht die ganze Zeit . Ich habe den folgenden Code geschrieben.
<?php
// ... namespace and use statements
class QueryListener extends Command
{
protected $signature = 'pots:query-listen';
protected $description = 'Runs forever and logs all database queries.';
public function __construct()
{
parent::__construct();
}
private function logDatabaseQueries()
{
Event::listen('illuminate.query', function ($query, $bindings, $time, $name) {
Log::info(PHP_EOL.$query.PHP_EOL);
});
}
public function handle()
{
$this->logDatabaseQueries();
echo 'Listening for database queries: Type \'stop\' to stop execution.'.PHP_EOL;
$stopExecution = false;
while ($stopExecution === false) {
$handle = fopen('php://stdin', 'r');
$line = fgets($handle);
if (strtolower(trim($line)) === 'stop') {
fclose($handle);
echo 'Aborting script.'.PHP_EOL;
$stopExecution = true;
}
}
}
}
Meine Erwartung war, dass, sobald ich diesen Befehl ausführen artisan
verwenden, die logDatabaseQueries()
Methode für Veranstaltungen zu hören beginnt. Dies funktioniert jedoch nicht, da ich nie Abfrageereignisse erhalte. Denke ich in die richtige Richtung?
ich keinen PHP-Experten sind, aber nach reiflicher Überlegung und sucht google, ich glaube, meine Frage oben nicht überhaupt Sinn macht. Meine Erwartung war, dass wenn der Konsolenbefehl ausgeführt wird, er alle Abfrageereignisse abfangen sollte, die von einer Anfrage generiert wurden. Jede neue Anfrage initialisiert jedoch eine neue Anwendung in einem separaten Thread. Der Konsolenbefehl wird wahrscheinlich in einem separaten Thread ausgeführt. Ich denke also nicht, dass diese unabhängigen Threads irgendwelche Daten zwischen ihnen teilen. Lassen Sie diese Frage für PHP/Laravel Gurus offen, um einen Kommentar abzugeben. – Rash