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.