produktive Log-Analyse ohne Terminal-Wechsel
Wer Magento-Fehler debuggt, wechselt ständig zwischen PhpStorm und einem Terminal, das tail -f exception.log ausführt. PhpStorm bietet eingebaute Möglichkeiten, Log-Dateien direkt in der IDE zu verfolgen, zu filtern und mit dem Quellcode zu verknüpfen – ohne diesen Kontextwechsel.
Inhaltsverzeichnis
- 1. Log-Analyse in PhpStorm: Was ist möglich?
- 2. Run-Konsole: Output direkt in der IDE verfolgen
- 3. Log-Dateien per Tail-Modus in Run Configurations einbinden
- 4. Magento-Logs: exception.log, system.log und debug.log
- 5. Filter und Regex in der Konsole nutzen
- 6. Xdebug-Output und Tracing in PhpStorm
- 7. Docker-Logs direkt in PhpStorm Services
- 8. Log-Werkzeuge im Vergleich
- 9. Zusammenfassung
- 10. FAQ
1. Log-Analyse in PhpStorm: Was ist möglich?
PhpStorm bietet mehrere eingebaute Mechanismen, um Log-Dateien ohne Terminal-Wechsel zu verfolgen. Die wichtigsten sind: die Run-Konsole, die stdout und stderr laufender Prozesse in Echtzeit anzeigt, die Log-Tab-Konfiguration in Run Configurations, die beliebige Dateien im Tail-Modus überwacht, die Docker Services-Integration für Container-Logs, und der Xdebug-Profiler mit Tracing für tiefer gehende PHP-Analyse. Alle diese Mechanismen zeigen Log-Inhalt direkt im IDE-Fenster an, ohne dass ein separates Terminal-Tab benötigt wird.
Besonders wertvoll ist die Kombination aus Log-Anzeige und Quellcode-Navigation: PhpStorm erkennt Pfade und Dateinamen in Stack-Traces und macht sie klickbar. Ein Klick auf app/code/Mironsoft/Catalog/Model/Product.php:142 im Log-Output öffnet die entsprechende Zeile direkt in der IDE. Das eliminiert das manuelle Suchen im Projektbaum und ist bei Magento-Stack-Traces, die dutzende Ebenen tief gehen können, erheblich effizienter als das Lesen im Terminal.
2. Run-Konsole: Output direkt in der IDE verfolgen
Jede Run Configuration in PhpStorm öffnet beim Start ein eigenes Konsolen-Panel. Die Ausgabe des gestarteten Prozesses erscheint in Echtzeit, farblich nach stdout (grün) und stderr (rot) differenziert. Das Konsolenfenster bietet eine eigene Suchfunktion (Find in Console, Tastenkürzel Ctrl+F im Konsolen-Panel), die Volltextsuche und Regex-Suche in der aktuellen Ausgabe erlaubt. Mit dem Scroll to End-Button bleibt die Anzeige beim neuesten Output – wie bei einem echten Tail.
Für PHP-CLI-Skripte, Composer-Befehle und Magento-CLI-Befehle (bin/magento-Äquivalente) sind Run Configurations der direkteste Weg, die Ausgabe in PhpStorm zu sehen. Unter Run → Edit Configurations → + → Shell Script oder → PHP Script wird der Befehl konfiguriert. Die Option Activate tool window sorgt dafür, dass das Konsolen-Panel automatisch sichtbar wird, wenn der Prozess gestartet wird. Alle gestarteten Prozesse sind über das Services-Panel gleichzeitig sichtbar und können dort einzeln gestartet, gestoppt und überwacht werden.
<?php
// Strukturiertes Logging in PHP — Stack-Traces werden in PhpStorm klickbar
// Monolog-Konfiguration für Magento 2 mit Channel-Separation
declare(strict_types=1);
namespace Mironsoft\Catalog\Logger;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Formatter\LineFormatter;
/**
* CatalogLogger provides structured logging for catalog operations.
*
* Log entries include full context for PhpStorm-clickable stack traces.
*/
class CatalogLogger extends Logger
{
private const LOG_FORMAT = "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n";
private const DATE_FORMAT = 'Y-m-d H:i:s';
public function __construct(
private readonly string $logPath = '/var/log/magento/catalog.log',
) {
parent::__construct('catalog');
$formatter = new LineFormatter(self::LOG_FORMAT, self::DATE_FORMAT);
$handler = new StreamHandler($this->logPath, Logger::DEBUG);
$handler->setFormatter($formatter);
$this->pushHandler($handler);
}
/**
* Log a product indexing operation with full context.
*
* @param int $productId The product ID being indexed
* @param string $operation The indexing operation name
* @param array $context Additional context data
*/
public function logIndexing(int $productId, string $operation, array $context = []): void
{
$this->info("Product indexing: {$operation}", array_merge([
'product_id' => $productId,
'operation' => $operation,
'memory_mb' => round(memory_get_usage(true) / 1048576, 2),
], $context));
}
}
3. Log-Dateien per Tail-Modus in Run Configurations einbinden
PhpStorm erlaubt es, beliebige Log-Dateien als zusätzliche Tabs in Run Configurations einzubinden. Unter Run → Edit Configurations → [Configuration wählen] → Logs-Tab können mit dem +-Button Log-Dateien hinzugefügt werden. Für jede Datei kann ein Anzeigename, der Dateipfad und die Option Skip Content konfiguriert werden – letztere lässt PhpStorm den vorhandenen Inhalt überspringen und nur neue Einträge anzeigen, wie ein echtes tail -f.
Für Magento-Projekte empfiehlt sich eine dedizierte Run Configuration für die Log-Überwachung: eine Shell Script Configuration mit dem Befehl true (um nichts auszuführen), aber mit allen relevanten Magento-Log-Dateien als Log-Tabs: var/log/exception.log, var/log/system.log, var/log/debug.log und optional var/log/magento_server_error.log. Diese Configuration kann zusammen mit dem PHP-Server als Compound Configuration gestartet werden, sodass Logs und Dev-Server gemeinsam aktiv sind.
4. Magento-Logs: exception.log, system.log und debug.log
Magento 2 schreibt Fehler in mehrere Log-Dateien, die unterschiedliche Informationsdichten haben. Die exception.log enthält vollständige Stack-Traces mit Dateipfaden und Zeilennummern – in PhpStorm werden diese automatisch als klickbare Links gerendert, sofern die Pfade mit dem Projektverzeichnis übereinstimmen. Das ist besonders nützlich bei tiefen Magento-Stack-Traces, die durch Interceptor-Ketten, Plugins und Events mehrere Dutzend Frames haben können.
Die system.log enthält Meldungen aller Log-Level von allen Magento-Modulen. In einem aktiven System mit vielen Modulen kann dieser Log sehr schnell sehr groß werden. Die Regex-Filter-Funktion in PhpStorm ist hier unverzichtbar: Statt alles zu lesen, filtert man auf Mironsoft (eigene Module) oder auf CRITICAL|ERROR (nur schwerwiegende Fehler). Der debug.log wird nur geschrieben, wenn Magento im Developer Mode läuft, und enthält detaillierte Debug-Ausgaben inklusive Request-Parametern und internem Zustand.
<?php
// Magento 2 Logging in eigenem Modul
// Fehler werden in PhpStorm als klickbare Stack-Traces angezeigt
declare(strict_types=1);
namespace Mironsoft\Catalog\Model;
use Psr\Log\LoggerInterface;
use Magento\Framework\Exception\LocalizedException;
/**
* ProductImporter handles product data import with comprehensive logging.
*/
class ProductImporter
{
public function __construct(
private readonly LoggerInterface $logger,
) {
}
/**
* Import a single product with full error logging.
*
* @param array $data Raw product data from import source
* @throws LocalizedException On validation failure
*/
public function importProduct(array $data): void
{
$sku = $data['sku'] ?? 'unknown';
try {
$this->logger->info('Starting product import', [
'sku' => $sku,
'fields' => array_keys($data),
]);
// Import logic here
$this->validateData($data);
$this->processImages($data);
$this->logger->info('Product imported successfully', ['sku' => $sku]);
} catch (LocalizedException $e) {
// Fehler-Log: Stack-Trace in PhpStorm als klickbare Links
$this->logger->error('Product import failed', [
'sku' => $sku,
'error' => $e->getMessage(),
'exception' => $e, // Monolog serialisiert den Stack-Trace
]);
throw $e;
} catch (\Throwable $e) {
$this->logger->critical('Unexpected error during import', [
'sku' => $sku,
'exception' => $e,
]);
throw new LocalizedException(__('Import failed for SKU: %1', $sku), $e);
}
}
}
5. Filter und Regex in der Konsole nutzen
Das Konsolen-Panel in PhpStorm unterstützt Volltextsuche (Ctrl+F im Konsolen-Tab) und Regex-Suche für die aktuelle Ausgabe. Für dauerhafte Filterung gibt es den Output Filter: Im Konsolen-Panel-Menü (Zahnrad-Icon) unter Filter Patterns können Regex-Muster definiert werden, die die Anzeige auf passende Zeilen beschränken. Das funktioniert sowohl für Live-Ausgaben laufender Prozesse als auch für Log-Dateien, die im Tail-Modus eingebunden sind.
Für die Analyse von Magento-Logs sind folgende Regex-Muster besonders nützlich: ^\[.*\] CRITICAL filtert nur kritische Fehler, Mironsoft\\\\ zeigt nur Einträge aus eigenen Modulen, Exception|Error|Fatal kombiniert alle Fehlertypen. Die Filter sind in den Run Configuration gespeichert und bleiben beim nächsten Start aktiv. Das Fold Lines Matching-Feature blendet nicht passende Zeilen aus, statt sie vollständig zu entfernen, was bei der Navigation im Log-Kontext hilfreich ist.
6. Xdebug-Output und Tracing in PhpStorm
Xdebug bietet neben dem interaktiven Debugger auch Tracing und Profiling. Der Trace-Modus (xdebug.mode=trace) schreibt eine detaillierte Aufzeichnung aller Funktionsaufrufe, Argumente und Rückgabewerte in eine Datei. PhpStorm öffnet solche Trace-Dateien mit dem eingebauten Xdebug Trace Viewer (über Tools → Xdebug Profiler → Analyse Xdebug Profiler Snapshot), der die Daten in einer sortierbaren Baumansicht darstellt. Funktionen mit der höchsten Laufzeit und Aufrufhäufigkeit sind sofort erkennbar, und ein Klick springt direkt zur entsprechenden Methode im Quellcode.
Für Magento-Performance-Analysen ist das Profiling besonders wertvoll: Ein einzelner Seitenaufruf in Magento kann mehrere tausend Funktionsaufrufe auslösen. Der PhpStorm Profiler-Viewer aggregiert diese zu einem Call-Graph und zeigt, welche Methoden die meiste Zeit verbrauchen. Das ist präziser als das manuelle Lesen von Profiling-Ausgaben im Terminal und ermöglicht direkte Navigation zum langsamen Code. Xdebug Profiling über Xdebug 3 aktiviert man mit xdebug.mode=profile und XDEBUG_TRIGGER=1 als Cookie oder Query-Parameter.
# Xdebug-Konfiguration für PhpStorm Log- und Trace-Integration
# Datei: /etc/php/8.4/fpm/conf.d/20-xdebug.ini
[xdebug]
zend_extension = xdebug.so
# Aktiviert debugging + profiling + tracing gleichzeitig möglich
xdebug.mode = debug,profile,trace
# Trigger-basiertes Aktivieren (kein permanentes Overhead)
xdebug.start_with_request = trigger
# PhpStorm IDE-Key für automatische Verbindung
xdebug.idekey = PHPSTORM
# Profiling-Ausgabepfad — PhpStorm kann Dateien hier direkt öffnen
xdebug.output_dir = /var/www/html/var/xdebug
xdebug.profiler_output_name = cachegrind.out.%R.%t
# Tracing für detaillierte Funktionsaufruf-Protokollierung
xdebug.trace_output_name = trace.%R.%t
xdebug.collect_params = 4 # Vollständige Parameter-Werte
xdebug.collect_return = true # Rückgabewerte protokollieren
# Verbindung zur PhpStorm-Instanz auf dem Host
xdebug.client_host = host.docker.internal
xdebug.client_port = 9003
xdebug.log = /var/log/xdebug.log
7. Docker-Logs direkt in PhpStorm Services
Das Services-Panel in PhpStorm (View → Tool Windows → Services) zeigt Docker-Container und ihre Logs direkt in der IDE an. Nach der Verbindung mit dem lokalen Docker-Daemon über Settings → Build, Execution, Deployment → Docker erscheinen alle Container im Services-Panel. Ein Klick auf einen Container zeigt dessen stdout/stderr in Echtzeit – identisch zu docker logs -f container-name im Terminal, aber ohne Tab-Wechsel.
Für Mark Shust Docker-Magento-Setups bedeutet das: Die Nginx-Access-Logs, PHP-FPM-Fehler und Redis-Ausgaben sind alle simultan im Services-Panel sichtbar, ohne mehrere Terminal-Tabs zu benötigen. PhpStorm färbt stderr rot und stdout grün, und die Suchfunktion (Ctrl+F) gilt auch für Container-Log-Ausgaben. Besonders nützlich ist die Option, die Log-Ausgabe eines Containers in einer Datei zu speichern (Save Console Output im Kontextmenü), um eine größere Log-Menge für die nachträgliche Analyse zu sichern.
8. Log-Werkzeuge im Vergleich
PhpStorm bietet mehrere Wege, Logs zu verfolgen. Die Wahl des richtigen Werkzeugs hängt vom Anwendungsfall ab. Wer kurzfristig einen Fehler sucht, nutzt die Run-Konsole. Wer dauerhaft mehrere Log-Dateien parallel verfolgen möchte, verwendet Log-Tabs in Run Configurations. Für Container-Logs ist das Services-Panel am direktesten.
| Werkzeug | Einsatz | Filter | Klickbare Pfade |
|---|---|---|---|
| Run-Konsole | Prozess-stdout/stderr | Regex + Volltextsuche | Ja, Stack-Traces |
| Log-Tabs (Tail) | Beliebige Log-Dateien | Filter Patterns (Regex) | Ja, erkannte Pfade |
| Docker Services | Container-Logs | Ctrl+F Suche | Teilweise |
| Xdebug Profiler | Performance-Analyse | Call-Graph, sortierbar | Ja, direkter Sprung |
| Terminal (built-in) | tail -f, grep, less | Manuell per grep | Nein (nur Text) |
Das eingebaute Terminal in PhpStorm ist weiterhin nützlich für komplexe Pipe-Kombinationen (tail -f | grep | awk), aber für den Alltag sind die IDE-nativen Werkzeuge produktiver, weil sie die Quellcode-Navigation integrieren. Ein Stack-Trace im Terminal erfordert manuelles Suchen der Datei; derselbe Stack-Trace in der Run-Konsole oder im Log-Tab ist direkt klickbar.
Mironsoft
Magento 2 Debugging, Performance-Analyse und Xdebug-Setup
Magento-Logs effizient analysieren und Fehler schneller finden?
Wir richten PhpStorm-Workflows für Magento-Log-Analyse ein, konfigurieren Xdebug für Docker-Setups und zeigen, wie Log-Dateien, Stack-Traces und Profiling-Daten direkt in der IDE navigiert werden.
Xdebug-Setup
Xdebug 3 für Docker-Magento konfigurieren mit PhpStorm-Integration
Log-Workflows
Run Configurations mit Log-Tabs für alle Magento-Log-Dateien einrichten
Performance
Xdebug Profiler für Magento-Seiten auswerten und Bottlenecks identifizieren
9. Zusammenfassung
PhpStorm bietet mit Run-Konsole, Log-Tabs in Run Configurations, dem Docker Services-Panel und dem Xdebug Profiler Viewer vier komplementäre Werkzeuge für die Log-Analyse, die den Kontextwechsel zwischen IDE und Terminal erheblich reduzieren. Der entscheidende Vorteil gegenüber dem Terminal: Dateipfade und Zeilennummern in Stack-Traces werden automatisch als klickbare Links gerendert, die direkt zur entsprechenden Codezeile springen.
Für Magento-Entwicklungsteams ist die Kombination aus einer dedizierten Log-Überwachungs-Run-Configuration (mit exception.log, system.log und debug.log als Log-Tabs), Regex-Filtern für eigene Module und Xdebug-Profiling für Performance-Analysen der effizienteste Workflow. Docker-Container-Logs im Services-Panel vervollständigen das Bild für containerisierte Setups mit Mark Shust Docker-Magento.
Log-Dateien in PhpStorm — Das Wichtigste auf einen Blick
Run-Konsole
stdout/stderr laufender Prozesse in Echtzeit. Ctrl+F für Volltextsuche. Stack-Traces als klickbare Links. Services-Panel für parallele Prozesse.
Log-Tabs (Tail)
Run Configuration → Logs-Tab → Dateipfad eintragen. Skip Content aktivieren für echtes tail -f. Filter Patterns für Regex-Filterung.
Magento-Logs
exception.log, system.log, debug.log als Log-Tabs. Regex-Filter: CRITICAL|ERROR oder Mironsoft\\ für eigene Module.
Xdebug & Docker
Profiler-Snapshots mit Tools → Xdebug Profiler öffnen. Docker-Container-Logs im Services-Panel. Kein Terminal-Wechsel nötig.