Log-Dateien, Tail und Filter in PhpStorm produktiv nutzen
AI generated
IDE
{ }
PhpStorm · Log-Analyse · Magento · Xdebug · Docker
Log-Dateien, Tail und Filter in PhpStorm
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.

14 Min. Lesezeit Run Console · Tail · Regex-Filter · Magento · Xdebug · Docker PhpStorm 2024.x · 2025.x

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.

10. FAQ: Log-Dateien in PhpStorm

1Log-Datei im Tail-Modus einbinden?
Run Configuration → Logs-Tab → + → Dateipfad + Skip Content aktivieren. PhpStorm zeigt neue Zeilen in Echtzeit wie tail -f.
2Stack-Traces als klickbare Links?
Ja, wenn Pfade mit dem Projektverzeichnis übereinstimmen. PhpStorm erkennt file.php:142-Muster und öffnet sie direkt in der IDE.
3Log-Ausgaben filtern?
Konsolen-Menü (Zahnrad) → Filter Patterns → Regex eintragen. Ctrl+F für manuelle Suche. Filter werden in der Run Configuration gespeichert.
4Docker-Container-Logs in PhpStorm?
View → Tool Windows → Services + Docker-Verbindung konfigurieren. Container-Klick öffnet Log-Stream in Echtzeit.
5Xdebug-Profiler-Datei öffnen?
Tools → Xdebug Profiler → Analyse Xdebug Profiler Snapshot. cachegrind.out als Call-Graph mit Laufzeiten. Klick springt zum Quellcode.
6Welche Magento-Logs einbinden?
exception.log, system.log, debug.log als Log-Tabs. Optional: report/ und magento_server_error.log. In einer dedizierten Log-Run-Configuration bündeln.
7Mehrere Log-Überwachungen gleichzeitig?
Compound Run Configuration mit Shell Script (Befehl 'true') + alle Log-Tabs. Oder alle Tabs in einer einzigen Configuration bündeln.
8JSON-Logs strukturiert anzeigen?
PhpStorm rendert JSON als Text. Für strukturierte Anzeige jq als externen Filter vorschalten. Automatisches JSON-Parsing ist nicht eingebaut.
9Run-Konsole vs. Terminal?
Run-Konsole: klickbare Pfade, Regex-Filter, gebunden an einen Prozess. Terminal: frei, aber ohne IDE-Integration für Pfad-Navigation.
10Xdebug 3 für Docker-Magento einrichten?
xdebug.mode=debug, start_with_request=trigger, client_host=host.docker.internal, port=9003. PhpStorm: Settings → PHP → Debug Port 9003 + Listening starten.