Registrazione Laravel: tutto ciò che devi sapere
Pubblicato: 2022-08-19Quando si sviluppa un'applicazione moderna, la registrazione dovrebbe essere in cima all'elenco delle priorità.
La registrazione fornisce un modo per visualizzare la tua app sia in fase di sviluppo che di produzione, consentendo trasparenza e visibilità. Con una registrazione adeguatamente strutturata, le applicazioni moderne possono diventare più facili da mantenere poiché possiamo identificare in modo proattivo i punti di errore e i colli di bottiglia delle prestazioni nella nostra app.
Il framework Laravel viene fornito con un robusto sistema di registrazione che gestisce tutti gli ostacoli coinvolti nella configurazione di un sistema di registrazione adeguatamente strutturato, pronto all'uso. Questo nuovo sistema di registrazione introdotto in Laravel 6.5 è potente e lo esploreremo in questo articolo.
Questo articolo esplorerà le basi della registrazione di Laravel e perché dovresti usare la registrazione di Laravel nel tuo prossimo progetto. Discuteremo in dettaglio la registrazione strutturata e la registrazione centralizzata. Inoltre, impareremo come implementare la registrazione di Laravel creando un'applicazione Todo.
Otterrai di più da questo articolo se hai già quanto segue sotto la cintura:
- Buona conoscenza dello sviluppo web
- Conoscenza di base di Laravel
- Creazione di app con Laravel
Che cos'è la registrazione di Laravel?
La registrazione di Laravel riguarda il modo in cui Laravel gestisce la registrazione, o la segnalazione automatica dei problemi, utilizzando un sistema di registrazione PHP virale chiamato Monolog. Tuttavia, a causa della filosofia di Laravel di utilizzare le popolari librerie esistenti per implementare diverse funzionalità del framework, Laravel utilizza Monolog per tutte le sue esigenze di registrazione.
Monolog è una libreria di registrazione PHP molto flessibile e popolare che possiamo configurare per inviare i tuoi log a file, socket, database e altri servizi web. Monolog fornisce un'interfaccia familiare per la scrittura di registri da file di testo standard a servizi avanzati di gestione dei registri di terze parti. Laravel in genere imposta Monolog per utilizzare un file di configurazione di registrazione standard.
Per ulteriori informazioni su Monolog e le sue funzionalità, consulta la documentazione ufficiale, poiché esula dallo scopo di questo articolo.
Prima di addentrarci nella configurazione e nell'implementazione della registrazione Laravel utilizzando Monolog, esploriamo altri motivi per utilizzare la registrazione Laravel e i diversi tipi.
Perché usare la registrazione Laravel?
Perché è necessaria la registrazione?
Il manifesto dell'app Twelve-Factor considera la registrazione come una delle preoccupazioni critiche di un'applicazione moderna, poiché la registrazione è una chiave per le prestazioni e il monitoraggio.
I log aiutano nella comprensione dettagliata degli errori che si verificano nella produzione e della loro origine. Inoltre, con strutture di registro adeguate, può mostrare l'utente in particolare, l'azione che ha causato l'errore e la possibile soluzione per una più rapida correzione e manutenzione dei bug.
La registrazione strutturata è un vero toccasana nelle applicazioni di produzione, poiché aiuta a risolvere i difetti ea risolvere i problemi di produzione. Inoltre, puoi monitorare e raccogliere tutti i tuoi messaggi di registro in tempo reale utilizzando strumenti di registrazione specializzati per analisi e report in tempo reale.
Per questi motivi, è necessario rendere la registrazione strutturata una priorità assoluta nel prossimo progetto di applicazione moderna.
Diamo un'occhiata alla panoramica dei diversi stili di registrazione disponibili.
Nozioni di base sulla registrazione di Laravel
Imparare le basi della registrazione ti aiuterà a capire come Laravel gestisce la registrazione e come puoi migliorare le tue pratiche di registrazione strutturata.
Esaminiamo due concetti essenziali nella registrazione per capire meglio come implementare le nostre procedure di registrazione.
Registrazione strutturata di Laravel
Nello sviluppo del software, la registrazione strutturata implementa un formato di messaggio predeterminato e coerente per i registri delle applicazioni. Questo formato consente di trattare i messaggi come dati che possono essere monitorati, manipolati e visualizzati molto meglio del normale formato di testo.
È necessario implementare un approccio di registrazione strutturato nello sviluppo di applicazioni moderne perché i file di registro sono le risorse essenziali per gli sviluppatori quando accade qualcosa di sbagliato all'applicazione in produzione.
Poiché Laravel utilizza Monolog, gli sviluppatori possono implementare rapidamente la registrazione strutturata configurando il logger per ricevere tipi specifici di informazioni, archiviando i file di registro in diversi formati e inviando i registri a vari servizi di gestione dei registri di terze parti per la visualizzazione.
Registrazione centralizzata Laravel
Un sistema di registrazione centralizzato è il punto in cui i registri vengono inviati alle soluzioni di gestione centralizzata dei registri (CLM) da più origini per un facile consolidamento e visualizzazione. Tuttavia, CLM è una soluzione di logger specializzata che raccoglie i messaggi di registro da diverse origini e consolida i dati per una facile elaborazione e visualizzazione.
Oltre alla raccolta dei dati, ci si aspetta che CLM supporti anche l'analisi dei dati di registro e una chiara presentazione dei dati dopo l'analisi.
Registrazione strutturata e registrazione di base
Esaminiamo la differenza tra la registrazione strutturata e la registrazione di base (non strutturata) e perché dovresti utilizzare la registrazione strutturata nel tuo progetto Laravel.
Registrazione di base
Nella registrazione di base, i file di registro vengono archiviati in un formato non elaborato con dati limitati per interrogare e identificare i singoli registri.
Quando si utilizza la registrazione di base, gli sviluppatori non saranno in grado di utilizzare strumenti analitici di terze parti per leggere, visualizzare e analizzare i registri a meno che non sviluppino uno strumento personalizzato o utilizzino uno strumento limitato che supporti il loro formato di registro.
Ci sono tre grandi ragioni per evitare di usare la registrazione di base:
- I sistemi di gestione centralizzata dei registri non possono funzionare con i dati senza supporto aggiuntivo.
- È necessaria una soluzione personalizzata per leggere e analizzare i dati di una soluzione di registrazione di base.
- Può essere difficile per gli amministratori leggere i dati di registrazione di base poiché sono grezzi e non strutturati.
Registrazione strutturata
La registrazione strutturata consente agli sviluppatori di risparmiare tempo utilizzando strumenti di analisi dei registri di terze parti open source che supportano la struttura dei registri standard per leggere, visualizzare e analizzare i registri.
I registri sono utili se contengono i dati corretti elencati di seguito, che è l'obiettivo della registrazione strutturata. Possiamo utilizzare i dati inclusi nella registrazione strutturata per creare dashboard, grafici, grafici e qualsiasi altra visualizzazione utile per determinare lo stato dell'applicazione.
Questi sono esempi di base delle informazioni che possiamo includere nei messaggi di registro strutturati. Inoltre, puoi personalizzare completamente i dati in base alle tue esigenze.
Ecco alcuni esempi di dati che puoi raccogliere con il logging strutturato:
- La porta utilizzata per eseguire la funzione
- La data e l'ora in cui si è verificato l'evento
- Il nome utente o l'ID del cliente
- Una descrizione dell'evento (messaggio di registro)
- Il protocollo utilizzato per eseguire la funzione
- La posizione dell'evento attivato (indicare l'API o l'app in esecuzione)
- L'ID evento univoco
- Il tipo di azione attivata (livello di registro)
I registri devono contenere dati sufficienti per visualizzare facilmente la soluzione o il motivo dell'evento del registro. Inoltre, tieni presente che non dovresti archiviare tutti i tipi di informazioni, come password o dati sensibili nei registri.
Ora che abbiamo intravisto in cosa consiste la registrazione di Laravel, passiamo all'implementazione della registrazione di Laravel creando un'applicazione con la registrazione come cittadino di prima classe.
Come implementare la registrazione Laravel con l'app Todo
Ora applicheremo ciò che abbiamo imparato finora creando un nuovo progetto Laravel e implementando la registrazione Laravel.
Se non hai mai usato Laravel, puoi leggere cos'è Laravel o dare un'occhiata al nostro elenco di eccellenti tutorial di Laravel per iniziare.
Allestimento di Laravel
Innanzitutto, creeremo una nuova istanza di Laravel usando il comando seguente. Puoi consultare la documentazione ufficiale per ulteriori informazioni.
Apri la tua console e vai alla posizione in cui memorizzi i tuoi progetti PHP prima di eseguire i comandi seguenti. Assicurati di aver installato e configurato correttamente Composer.
composer create-project laravel/laravel laravel-logging-app cd laravel-logging-app // Change directory to current Laravel installation php artisan serve // Start Laravel development server
Configurazione e seeding del database
Successivamente, configureremo il nostro database, creeremo un nuovo modello Todo
e semineremo 200 dati falsi per i test.
Apri il tuo client di database e crea un nuovo database. Faremo lo stesso con il nome laravel_logging_app_db
e poi riempiremo il nostro file .env con le credenziali del database:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_logging_app_db DB_USERNAME=//DB USERNAME HERE DB_PASSWORD=//DB PASSWORD HERE
Successivamente, eseguiremo il comando seguente per creare contemporaneamente la migrazione e il modello Todo
:
php artisan make:model Todo -mc
Apri la migrazione trovata appena creata database/migrations/xxx-create-todos-xxx.php e incolla i seguenti codici:
<?php use IlluminateSupportFacadesSchema; use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class CreateTodosTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('todos', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('description')->nullable(); $table->boolean('is_completed')->default(false); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('todos'); } }
Puoi seminare le tue cose da fare con dati falsi imparando a seminare i tuoi database in Laravel usando Faker.
Panoramica di Monologo
Con Laravel Monolog, puoi eseguire lo streaming e inviare log strutturati a diversi canali come e-mail, Slack, file, socket, caselle di posta, database e vari servizi web. In Laravel, puoi configurare la registrazione da un singolo file di configurazione che si trova in config/logging.php .
Il file di configurazione viene fornito con driver di registro predefiniti tra cui scegliere e il driver predefinito è uno stack
che utilizza il single
canale per accedere a un file laravel.log che si trova nella cartella storage/logs . Dimostreremo la registrazione strutturata utilizzando un paio di driver di registro Laravel.
Laravel fornisce una manciata di metodi per interagire con i log, come dimostrato in generale nel file del controller TodosController.php a breve.
Scrittura di messaggi di registro nel controller
Apri il file del controller TodosController.php appena creato trovato nella cartella app/Http/Controllers e incolla i seguenti codici:
<?php namespace AppHttpControllers; use AppModelsTodo; use IlluminateHttpRequest; use AppHttpControllersController; use IlluminateSupportFacadesAuth; use IlluminateSupportFacadesLog; class TodosController extends Controller { public function index(Request $request) { $todos = Todo::all(); Log::warning('User is accessing all the Todos', ['user' => Auth::user()->id]); return view('dashboard')->with(['todos' => $todos]); } public function byUserId(Request $request) { $todos = Todo::where('user_id', Auth::user()->id)->get(); Log::info('User is accessing all his todos', ['user' => Auth::user()->id]); return view('dashboard')->with(['todos' => $todos]); } public function show(Request $request, $id) { $todo = Todo::find($id); Log::info('User is accessing a single todo', ['user' => Auth::user()->id, 'todo' => $todo->id]); return view('show')->with(['todo' => $todo]); } public function update(Request $request, $id) { # Validations before updating $todo = Todo::where('user_id', Auth::user()->id)->where('id', $id)->first(); Log::warning('Todo found for updating by user', ['user' => Auth::user()->id, 'todo' => $todo]); if ($todo) { $todo->title = $request->title; $todo->desc = $request->desc; $todo->status = $request->status == 'on' ? 1 : 0; if ($todo->save()) { Log::info('Todo updated by user successfully', ['user' => Auth::user()->id, 'todo' => $todo->id]); return view('show', ['todo' => $todo]); } Log::warning('Todo could not be updated caused by invalid todo data', ['user' => Auth::user()->id, 'todo' => $todo->id, 'data' => $request->except('password')]); return; // 422 } Log::error('Todo not found by user', ['user' => Auth::user()->id, 'todo' => $id]); return; // 401 } public function store(Request $request) { Log::warning('User is trying to create a single todo', ['user' => Auth::user()->id, 'data' => $request->except('password')]); # Validations before updating $todo = new Todo; $todo->title = $request->title; $todo->desc = $request->desc; $todo->user_id = Auth::user()->id; if ($todo->save()) { Log::info('User create a single todo successfully', ['user' => Auth::user()->id, 'todo' => $todo->id]); return view('show', ['todo' => $todo]); } Log::warning('Todo could not be created caused by invalid todo data', ['user' => Auth::user()->id, 'data' => $request->except('password')]); return; // 422 } public function delete(Request $request, $id) { Log::warning('User is trying to delete a single todo', ['user' => Auth::user()->id, 'todo' => $id]); $todo = Todo::where('user_id', Auth::user()->id)->where('id', $id)->first(); if ($todo) { Log::info('User deleted a single todo successfully', ['user' => Auth::user()->id, 'todo' => $id]); $todo->delete(); return view('index'); } Log::error('Todo not found by user for deleting', ['user' => Auth::user()->id, 'todo' => $id]); return; // 404 } }
All'interno di ciascuno dei metodi in TodoController
, abbiamo aggiunto la facciata Log
con un livello di log specifico per definire il tipo di errore che vogliamo inviare. Di seguito è riportato un esempio di utilizzo di
Log facciata nel metodo store
.
public function store(Request $request) { Log::warning('User is trying to create a single todo', ['user' => Auth::user()->id, 'data' => $request->except('password')]); # Validations before updating $todo = new Todo; $todo->title = $request->title; $todo->desc = $request->desc; $todo->user_id = Auth::user()->id; if ($todo->save()) { Log::info('User create a single todo successfully', ['user' => Auth::user()->id, 'todo' => $todo->id]); return view('show', ['todo' => $todo]); } Log::warning('Todo could not be created caused by invalid todo data', ['user' => Auth::user()->id, 'data' => $request->except('password')]); return; // 422 }
Formattazione dei messaggi di registro
Supponiamo che tu non ti senta a tuo agio con il LineFormatter
predefinito usato da Laravel, che fa un ottimo lavoro nel fornire messaggi leggibili e utili.
In tal caso, puoi facilmente creare un oggetto formattatore personalizzato per adattarlo al tuo caso d'uso e utilizzarlo in tutta l'applicazione.
La documentazione ufficiale di Monolog fornisce un elenco completo dei formattatori disponibili e può facilmente crearne uno personalizzato.
In Laravel, puoi facilmente impostare qualsiasi driver per utilizzare il tuo formattatore personalizzato aggiungendolo all'elenco come di seguito all'interno del file di configurazione che si trova in config/logging.php :
'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), 'days' => 14, 'formatter' => MonologFormatterHtmlFormatter::class, 'formatter_with' => [ 'dateFormat' => 'Ym-d', ] ],
L'esempio precedente aggiunge un MonologFormatterHtmlFormatter
personalizzato al driver daily
utilizzando la chiave formatter
e formatter_with
nella configurazione del canale daily
per modificare il formato delle date.
Invio di registri a canali diversi
Con l'aiuto di Monolog, Laravel può inviare log a diversi canali e a più canali contemporaneamente.
Dimostriamo come inviare i log al nostro canale Slack seguendo questi semplici passaggi. Cambia il canale di registro predefinito in Slack e aggiungi l'URL Slack Webhook nel tuo file .env .
LOG_CHANNEL=slack LOG_SLACK_WEBBHOOK_URL= Slack_webhook_url_here
Successivamente, verifica la tua configurazione registrando un messaggio nella tua applicazione utilizzando la facciata Log
come quella mostrata di seguito:
Log::debug("The API instance is on fire caused by:", ['user' => 1])
Puoi aprire il tuo canale Slack per verificare l'errore stampato nel canale desiderato che hai specificato durante la generazione dell'URL del webhook.
Riepilogo
La registrazione è importante quanto qualsiasi altro fattore della tua applicazione, se non di più. Ecco perché è suggerito dal manifesto dell'app Twelve-Factor come una delle preoccupazioni più critiche di qualsiasi applicazione moderna.
Con una registrazione efficace, puoi leggere, visualizzare e visualizzare facilmente errori e difetti che si verificano nella tua applicazione pronta per la produzione. A tal fine, è importante implementare l'accesso strutturato nella tua applicazione fin dall'inizio del progetto.
In questo articolo, abbiamo esplorato la registrazione di Laravel e perché dovresti usarla nel tuo prossimo progetto. Abbiamo discusso in dettaglio sia la registrazione strutturata che la registrazione centralizzata. Inoltre, abbiamo imparato come implementare la registrazione Laravel creando un'applicazione Todo.
Come pensi di implementare l'accesso alla tua prossima app? Fatecelo sapere nella sezione commenti.