Laravel Günlüğü: Bilmeniz Gereken Her Şey
Yayınlanan: 2022-08-19Modern bir uygulama geliştirirken, loglama öncelik listesinin başında olmalıdır.
Günlüğe kaydetme, uygulamanızı hem geliştirme hem de üretim aşamasında görselleştirmenin bir yolunu sağlayarak şeffaflık ve görünürlük sağlar. Düzgün yapılandırılmış günlük kaydıyla, uygulamamızdaki arıza noktalarını ve performans darboğazlarını proaktif olarak tanımlayabildiğimiz için modern uygulamaların bakımı daha kolay hale gelebilir.
Laravel çerçevesi, kutudan çıktığı gibi düzgün yapılandırılmış bir günlük sisteminin yapılandırılmasıyla ilgili tüm engelleri kaldıran sağlam bir günlük tutma sistemi ile birlikte gelir. Laravel 6.5'te tanıtılan bu yeni kayıt sistemi güçlüdür ve bu makalede onu inceleyeceğiz.
Bu makale, Laravel günlük kaydının temellerini ve bir sonraki projenizde neden Laravel günlük kaydını kullanmanız gerektiğini keşfedecektir. Yapılandırılmış günlüğe kaydetme ve merkezi günlüğe kaydetmeyi ayrıntılı olarak tartışacağız. Ayrıca, bir Todo uygulaması oluşturarak Laravel günlüğünün nasıl uygulanacağını öğreneceğiz.
Aşağıdakilere zaten sahipseniz, bu makaleden daha fazlasını elde edeceksiniz:
- İyi derecede web geliştirme bilgisi
- Laravel'in temel anlayışı
- Laravel ile uygulamalar oluşturma
Laravel Günlüğü Nedir?
Laravel günlük kaydı, tamamen Laravel'in Monolog adlı viral bir PHP kayıt sistemi kullanarak günlük kaydı veya otomatik sorun raporlamayı nasıl ele aldığı ile ilgilidir. Ancak, Laravel'in farklı çerçeve özelliklerini uygulamak için mevcut popüler kütüphaneleri kullanma felsefesi nedeniyle, Laravel tüm günlük kaydı ihtiyaçları için Monolog'u kullanır.
Monolog, günlüklerinizi dosyalara, soketlere, veritabanlarına ve diğer web hizmetlerine göndermek için yapılandırabileceğimiz oldukça esnek ve popüler bir PHP günlük kitaplığıdır. Monolog, standart metin dosyalarından gelişmiş üçüncü taraf günlük yönetimi hizmetlerine günlük yazmak için tanıdık bir arabirim sağlar. Laravel, genellikle Monolog'u standart bir günlük kaydı yapılandırma dosyası kullanacak şekilde kurar.
Monolog ve özellikleri hakkında daha fazla bilgi için resmi belgelere bakın, çünkü bu makalenin kapsamı dışındadır.
Monolog kullanarak Laravel günlüğünü yapılandırmaya ve uygulamaya dalmadan önce, Laravel günlüğünü ve farklı türlerini kullanmak için daha fazla neden keşfedelim.
Neden Laravel Günlüğü Kullanılmalı?
Günlüğe kaydetme neden gereklidir?
Twelve-Factor App manifestosu, günlüğe kaydetmeyi modern bir uygulamanın kritik kaygılarından biri olarak ele alır, çünkü günlüğe kaydetme performans ve izleme için bir anahtardır.
Günlükler, üretimde meydana gelen hataların ve nereden kaynaklandıklarının ayrıntılı olarak anlaşılmasına yardımcı olur. Ek olarak, uygun günlük yapılarıyla belirli kullanıcıyı, hataya neden olan eylemi ve daha hızlı hata düzeltme ve bakım için olası çözümü gösterebilir.
Yapılandırılmış günlük kaydı, üretim uygulamalarında kusurları gidermeye ve üretimdeki sorunları çözmeye yardımcı olarak bir cankurtarandır. Ayrıca, canlı analiz ve raporlama için özel kayıt araçlarını kullanarak tüm günlük mesajlarınızı gerçek zamanlı olarak izleyebilir ve toplayabilirsiniz.
Bu nedenlerden dolayı, bir sonraki modern uygulama projenizde yapılandırılmış günlük kaydını birinci öncelik haline getirmeniz gerekir.
Mevcut farklı günlükleme stillerine genel bakışa bakalım.
Laravel Günlüğünün Temelleri
Günlüğe kaydetmenin temellerini öğrenmek, Laravel'in günlüğe kaydetmeyi nasıl ele aldığını ve yapılandırılmış günlük uygulamalarınızı nasıl iyileştirebileceğinizi anlamanıza yardımcı olacaktır.
Günlüğe kaydetme prosedürlerimizi nasıl uygulayacağımızı daha iyi anlamak için günlüğe kaydetmeyle ilgili iki temel kavramı inceleyelim.
Laravel Yapılandırılmış Günlüğe Kaydetme
Yazılım geliştirmede, yapılandırılmış günlük kaydı, uygulama günlükleri için önceden belirlenmiş ve tutarlı bir mesaj formatı uygular. Bu biçim, mesajların normal metin biçiminden çok daha iyi izlenebilen, değiştirilebilen ve görselleştirilebilen veriler olarak ele alınmasını sağlar.
Günlük dosyaları, üretimde uygulamanızda yanlış bir şey olduğunda geliştiriciler için temel varlıklar olduğundan, modern uygulama geliştirmenizde yapılandırılmış bir günlük kaydı yaklaşımı uygulamalısınız.
Laravel, Monolog kullandığından, geliştiriciler, günlükleri belirli bilgi türlerini alacak şekilde yapılandırarak, günlük dosyalarını farklı biçimlerde depolayarak ve günlükleri görselleştirme için çeşitli üçüncü taraf günlük yönetim hizmetlerine göndererek yapılandırılmış günlüğü hızlı bir şekilde uygulayabilirler.
Laravel Merkezi Günlük Kaydı
Merkezi bir günlük kaydı sistemi, kolay birleştirme ve görselleştirme için günlüklerin birden çok kaynaktan Merkezi Günlük Yönetimi (CLM) çözümlerine gönderildiği yerdir. Ancak CLM, farklı kaynaklardan günlük mesajları toplayan ve verileri kolay işleme ve görselleştirme için birleştiren özel bir günlükçü çözümüdür.
Veri toplamanın yanı sıra, CLM'nin günlük verilerinin analizini ve analizden sonra verilerin net bir şekilde sunulmasını desteklemesi de bekleniyor.
Yapılandırılmış Günlük Kaydı ve Temel Günlük Kaydı
Yapılandırılmış günlük kaydı ile temel (yapılandırılmamış) günlük kaydı arasındaki farkı ve neden yapılandırılmış günlük kaydını Laravel projenizde kullanmanız gerektiğini inceleyelim.
Temel Günlük Kaydı
Temel günlüğe kaydetmede, günlük dosyaları, bireysel günlükleri sorgulamak ve tanımlamak için sınırlı verilerle ham bir biçimde depolanır.
Geliştiriciler, Temel günlük kaydını kullanırken, özel bir araç geliştirmedikçe veya günlük biçimlerini destekleyen sınırlı bir araç kullanmadıkça, günlükleri okumak, görüntülemek ve analiz etmek için üçüncü taraf analitik araçlarını kullanamazlar.
Temel günlük kaydı kullanmaktan kaçınmanın üç büyük nedeni vardır:
- Merkezi log yönetim sistemleri, ek destek olmadan verilerle çalışamaz.
- Temel bir günlük kaydı çözümünün verilerini okumak ve ayrıştırmak için özelleştirilmiş bir çözüm gerekir.
- Yöneticiler için ham ve yapılandırılmamış olduğu için temel günlük verilerini okuması zor olabilir.
Yapılandırılmış Günlük
Yapılandırılmış günlük kaydı, günlükleri okumak, görüntülemek ve analiz etmek için standart günlük yapısını destekleyen açık kaynaklı üçüncü taraf günlük analiz araçlarını kullanarak geliştiricilere zaman kazandırır.
Günlükler, aşağıda listelenen doğru verileri içeriyorsa yararlıdır; bu, yapılandırılmış günlük kaydının başarmayı amaçladığı şeydir. Uygulamanın durumunu belirlemek için panolar, grafikler, çizelgeler ve diğer yararlı görselleştirmeleri oluşturmak için yapılandırılmış günlük kaydına dahil edilen verileri kullanabiliriz.
Bunlar, yapılandırılmış günlük mesajlarına ekleyebileceğimiz bilgilerin temel örnekleridir. Ek olarak, verileri ihtiyaçlarınıza göre tamamen özelleştirebilirsiniz.
Yapılandırılmış günlük kaydı ile toplayabileceğiniz verilere ilişkin bazı örnekler:
- İşlevi yürütmek için kullanılan bağlantı noktası
- Olayın gerçekleştiği tarih ve saat
- Müşteri kullanıcı adı veya kimliği
- Olayın açıklaması (günlük mesajı)
- İşlevi yürütmek için kullanılan protokol
- Tetiklenen olayın konumu (API'yi veya çalışan uygulamayı belirtin)
- Benzersiz olay kimliği
- Tetiklenen eylemin türü (günlük düzeyi)
Günlükler, çözümü veya günlük olayının nedenini kolayca görselleştirmek için yeterli veri içermelidir. Ayrıca, günlüklerde parolalar veya hassas veriler gibi her türlü bilgiyi saklamamanız gerektiğini unutmayın.
Şimdi Laravel günlüğünün neyle ilgili olduğunu anladığımıza göre, birinci sınıf bir vatandaş olarak günlüğe kaydetme ile bir uygulama oluşturarak Laravel günlüğünü uygulamaya geçelim.
Todo Uygulaması ile Laravel Günlüğü Nasıl Uygulanır
Şimdi yeni bir Laravel projesi oluşturarak ve Laravel günlüğü uygulayarak şu ana kadar öğrendiklerimizi uygulayacağız.
Daha önce Laravel kullanmadıysanız, başlamak için Laravel'in ne olduğunu okuyabilir veya mükemmel Laravel öğreticileri listemize göz atabilirsiniz.
Laravel'i kurma
İlk olarak, aşağıdaki komutu kullanarak yeni bir Laravel örneği oluşturacağız. Daha fazlası için resmi belgelere bakabilirsiniz.
Konsolunuzu açın ve aşağıdaki komutları çalıştırmadan önce PHP projelerinizi depoladığınız yere gidin. Composer'ın doğru yüklendiğinden ve yapılandırıldığından emin olun.
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
Veritabanını Yapılandırma ve Tohumlama
Ardından, veritabanımızı kuracağız, yeni bir Todo
modeli oluşturacağız ve test için 200 sahte veri ekleyeceğiz.
Veritabanı istemcinizi açın ve yeni bir veritabanı oluşturun. laravel_logging_app_db
adıyla yapacağız ve ardından .env dosyamızı veritabanı kimlik bilgileriyle dolduracağız:
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
Ardından, geçiş ve Todo
modelini aynı anda oluşturmak için aşağıdaki komutu çalıştıracağız:
php artisan make:model Todo -mc
Yeni oluşturulan geçiş bulundu database/migrations/xxx-create-todos-xxx.php dosyasını açın ve aşağıdaki kodları yapıştırın:
<?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'); } }
Faker kullanarak veritabanlarınızı Laravel'de tohumlamayı öğrenerek, yapılacakları sahte verilerle tohumlayabilirsiniz.
Monolog'a Genel Bakış
Laravel Monolog ile e-postalar, Slack, dosyalar, soketler, gelen kutuları, veritabanları ve çeşitli web servisleri gibi farklı kanallara yapılandırılmış günlükleri aktarabilir ve gönderebilirsiniz. Laravel'de, config/logging.php içinde bulunan tek bir yapılandırma dosyasından günlüğe kaydetmeyi yapılandırabilirsiniz.
Yapılandırma dosyası, aralarından seçim yapabileceğiniz önceden tanımlanmış günlük sürücüleri ile birlikte gelir ve varsayılan sürücü, depolama/günlükler klasöründe bulunan bir stack
dosyasına oturum açmak için single
kanalı kullanan bir yığındır . Birkaç Laravel günlük sürücüsü kullanarak yapılandırılmış günlük kaydını göstereceğiz.
TodosController.php denetleyici dosyasında kısaca gösterildiği gibi, Laravel, Günlüklerle etkileşime geçmek için birkaç yöntem sunar.
Denetleyicide Günlük Mesajları Yazma
App/Http/Controllers klasöründe bulunan yeni oluşturulan TodosController.php denetleyici dosyasını açın ve aşağıdaki kodları yapıştırın:
<?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 } }
TodoController
yöntemlerin her birine, göndermek istediğimiz hatanın türünü tanımlamak için belirli bir günlük düzeyiyle Log
cephesini ekledik. Aşağıda, kullanımın bir örneği
store
yönteminde cepheyi günlüğe kaydedin.
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 }
Günlük Mesajlarını Biçimlendirme
Laravel tarafından kullanılan ve okunabilir ve faydalı mesajlar sağlama konusunda harika bir iş çıkaran varsayılan LineFormatter
ile rahat olmadığınızı varsayalım.
Bu durumda, kullanım durumunuza uyacak şekilde özelleştirilmiş bir biçimlendirici nesnesini kolayca döndürebilir ve uygulama boyunca kullanabilirsiniz.
Resmi Monolog belgeleri, mevcut biçimlendiricilerin tam bir listesini verir ve kolayca özel bir tane oluşturabilir.
Laravel'de, config/logging.php adresinde bulunan yapılandırma dosyasının içindeki aşağıdaki gibi listeye ekleyerek özel biçimlendiricinizi kullanmak için sürücülerden herhangi birini kolayca ayarlayabilirsiniz:
'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), 'days' => 14, 'formatter' => MonologFormatterHtmlFormatter::class, 'formatter_with' => [ 'dateFormat' => 'Ym-d', ] ],
Yukarıdaki örnek, tarihlerin formatını değiştirmek için daily
kanal yapılandırmasında formatter
ve formatter_with
anahtarını kullanarak daily
sürücüye özel bir MonologFormatterHtmlFormatter
ekler.
Günlükleri Farklı Kanallara Gönderme
Monolog yardımıyla Laravel, logları aynı anda farklı kanallara ve birden fazla kanala gönderebilir.
Bu basit adımları izleyerek Slack kanalımıza nasıl günlük gönderileceğini gösterelim. Varsayılan günlük kanalını Slack olarak değiştirin ve .env dosyanıza Slack Webhook URL'sini ekleyin.
LOG_CHANNEL=slack LOG_SLACK_WEBBHOOK_URL= Slack_webhook_url_here
Ardından, aşağıda gösterildiği gibi Log
cephesini kullanarak uygulamanıza bir mesaj kaydederek konfigürasyonunuzu test edin:
Log::debug("The API instance is on fire caused by:", ['user' => 1])
Webhook URL'sini oluştururken belirttiğiniz istenen kanalda yazdırılan hatayı kontrol etmek için Slack kanalınızı açabilirsiniz.
Özet
Günlüğe kaydetme, uygulamanızın diğer tüm faktörleri kadar, hatta daha fazla önemlidir. Bu nedenle, Twelve-Factor App manifestosu tarafından herhangi bir modern uygulamanın en kritik endişelerinden biri olarak önerilmektedir.
Etkili günlük kaydı ile üretime hazır uygulamanızda oluşan hataları ve kusurları kolayca okuyabilir, görüntüleyebilir ve görselleştirebilirsiniz. Bu amaçla, projenin başlangıcından itibaren uygulamanıza yapılandırılmış oturum açmayı uygulamanız önemlidir.
Bu yazıda, Laravel günlüğünü ve neden bir sonraki projenizde kullanmanız gerektiğini araştırdık. Hem yapılandırılmış günlük kaydı hem de merkezileştirilmiş günlük kaydı konusunu ayrıntılı olarak tartıştık. Ayrıca bir Todo uygulaması oluşturarak Laravel günlük kaydının nasıl uygulanacağını öğrendik.
Bir sonraki uygulamanızda oturum açmayı nasıl uygulamayı planlıyorsunuz? Yorum bölümünde bize bildirin.