PSR-3 ist eine Empfehlung der PHP-FIG (PHP Framework Interoperability Group), die ein standardisiertes Interface für Logging-Bibliotheken in PHP-Anwendungen festlegt. Das Ziel ist es, Entwicklern eine einheitliche und flexible Schnittstelle für das Logging bereitzustellen, die unabhängig von der verwendeten Bibliothek funktioniert. Dadurch können Log-Bibliotheken leicht ersetzt oder geändert werden, ohne dass bestehender Code angepasst werden muss.
Standardisiertes Logger-Interface: PSR-3 definiert das Interface Psr\Log\LoggerInterface
mit verschiedenen Methoden für unterschiedliche Log-Level wie emergency()
, alert()
, critical()
, error()
, warning()
, notice()
, info()
und debug()
.
Log-Level: Die acht vordefinierten Log-Level (z. B. emergency
, alert
, error
) basieren auf dem weit verbreiteten Syslog-Protokoll RFC 5424, was die Kompatibilität mit vielen Logging-Systemen sicherstellt.
Nachrichteninterpolation: PSR-3 erlaubt es, Platzhalter in Log-Nachrichten (z. B. {platzhalter}
) durch tatsächliche Werte zu ersetzen. Beispiel:$logger->error("Benutzer {username} nicht gefunden", ['username' => 'johndoe']);
Dadurch werden Log-Nachrichten konsistent und lesbar formatiert, ohne dass aufwendige String-Manipulation nötig ist.
Flexible Implementierung: Jede Logging-Bibliothek, die LoggerInterface
implementiert, kann in PSR-3-kompatiblem Code verwendet werden, wie etwa die weit verbreitete Bibliothek Monolog.
Dynamische Log-Level: Mit der log()
-Methode kann man Nachrichten auch dynamisch auf jedem gewünschten Log-Level protokollieren, indem der Level als Parameter übergeben wird.
Hier ein Beispiel, wie ein PSR-3-konformer Logger verwendet wird:
use Psr\Log\LoggerInterface;
class UserService
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function findUser($username)
{
$this->logger->info("Suche nach Benutzer {username}", ['username' => $username]);
// ...
}
}
Mehr Informationen und Details finden sich auf der offiziellen PHP-FIG-Seite zur PSR-3-Spezifikation.