Interfaccia di registrazione PSR (e perché la registrazione è importante)
Due funzionalità di PHP che credo siano spesso abusate quando si tratta di "debugging" sono l’uso di echo e var_dump. Ne ho parlato in alcuni articoli diversi sul debug (come qui e qui ).
E per quanto io sia un fan dell’uso di un debugger, penso che sia anche importante implementare un tipo di sistema di registrazione in modo che tu o il tuo cliente possiate tornare indietro e rivedere l’attività che si è verificata all’interno del sistema come hanno fatto loro o i loro utenti stato, sai, usandolo.
Tuttavia, ci sono due aspetti per farlo, specialmente se stai cercando di seguire l’interfaccia di registrazione PSR e sono:
- le regole per l’effettiva interfaccia di registrazione,
- un progetto che implementa correttamente detta interfaccia di registrazione.
Allora perché non affrontare entrambi in questo post?
L’interfaccia di registrazione PSR
L’ interfaccia di registrazione PSR (o PSR-3) copre una serie di cose di cui puoi leggere più dettagliatamente nella pagina effettiva.
Questi includono:
- Le basi
- Messaggi
- Contesto
- Classi di aiuto
- Pacchi
- Interfacce
- Livelli di registro
- E altro ancora.
Ma ai fini di questo articolo, voglio parlare in modo specifico dell’interfaccia stessa, di un progetto che la implementa e del perché è importante.
L’interfaccia di registrazione
La homepage per la documentazione afferma:
Questo documento descrive un’interfaccia comune per le librerie di registrazione.
L’obiettivo principale è consentire alle librerie di ricevere un oggetto PsrLogLoggerInterface e di scrivervi dei log in modo semplice e universale.
Dal punto di vista dello sviluppo, va bene, giusto? Voglio dire, fornisce un modo unico e coerente su cui possiamo scommettere per qualsiasi libreria di registrazione scegliamo di utilizzare nei nostri progetti. Tratterò la mia libreria preferita più avanti nell’articolo.
Per coloro che non conoscono la programmazione orientata agli oggetti o semplicemente curiosi di sapere come un’interfaccia coerente ci avvantaggia, pensala in questo modo: indipendentemente dal sistema che scegli, hai la garanzia di avere un certo insieme di funzioni, stati e così via può utilizzare nella tua applicazione.
In definitiva, l’aggiunta di un sistema di registrazione che ha uno standard da seguire fornisce una varietà di vantaggi indipendentemente dalla libreria scelta (purché sia conforme a PSR-3).
Prova Monologo
Monolog è più o meno l’utilità di registrazione di fatto per le applicazioni PHP.
È facile aggiungere il progetto tramite Composer, ma include anche una varietà di modi diversi per generare i dati:
Monolog invia i tuoi log a file, socket, caselle di posta, database e vari servizi web. Vedi l’elenco completo dei gestori di seguito. Gestori speciali consentono di creare strategie di registrazione avanzate.
Personalmente, l’ho usato solo nel contesto dell’invio di output ai file; tuttavia, avere la possibilità di inviarlo in output su altri sistemi (soprattutto database come quando si lavora con WordPress) è bello. Certo, non vuoi abusare di questa capacità.
In secondo luogo, è importante riconoscere che, sebbene sia possibile istanziare il Logger all’interno di una funzione o di un’altra classe, esistono altri modi più orientati agli oggetti per farlo. PSR-3 copre questo (come menzionato sopra).
In breve, vuoi assicurarti che la tua classe accetti un’istanza di una classe che implementa LoggerInterface. Monolog implementa detta interfaccia, quindi non è un problema.
Inoltre, cosa succede quando si dispone di un gruppo di classi correlate che devono tutte implementare la registrazione?
- Queste classi ereditano da un genitore comune?
- Queste classi implementano un tratto? (Questa è un’opzione che un amico mi ha presentato di recente.)
- Ogni classe accetta semplicemente la dipendenza tramite l’iniezione del costruttore?
Esistono vari modi in cui i logger possono essere aggiunti a una classe e dipende da come è organizzato il progetto.
Altro sulla registrazione
In ogni caso, l’introduzione dell’accesso in un’applicazione è importante per una serie di motivi, ad esempio per essere in grado di risolvere i problemi quando qualcosa non si comporta come previsto sia in fase di sviluppo, staging e soprattutto in produzione.
