Laravel Logging: ทุกสิ่งที่คุณต้องการรู้
เผยแพร่แล้ว: 2022-08-19เมื่อพัฒนาแอปพลิเคชันที่ทันสมัย การบันทึกควรอยู่ที่ด้านบนสุดของรายการลำดับความสำคัญ
การบันทึกช่วยให้เห็นภาพแอปของคุณทั้งในด้านการพัฒนาและการผลิต ทำให้เกิดความโปร่งใสและการมองเห็น ด้วยการบันทึกที่มีโครงสร้างอย่างถูกต้อง แอปพลิเคชันที่ทันสมัยสามารถบำรุงรักษาได้ง่ายขึ้น เนื่องจากเราสามารถระบุจุดของความล้มเหลวและปัญหาคอขวดด้านประสิทธิภาพในแอปของเราได้ในเชิงรุก
เฟรมเวิร์ก Laravel มาพร้อมกับระบบการบันทึกที่มีประสิทธิภาพ ซึ่งจัดการอุปสรรคทั้งหมดที่เกี่ยวข้องกับการกำหนดค่าระบบการบันทึกที่มีโครงสร้างอย่างเหมาะสมตั้งแต่แกะกล่อง ระบบการบันทึกแบบใหม่ที่นำมาใช้ใน Laravel 6.5 นั้นทรงพลัง และเราจะสำรวจมันในบทความนี้
บทความนี้จะสำรวจพื้นฐานของการบันทึก Laravel และเหตุผลที่คุณควรใช้การบันทึก Laravel ในโครงการต่อไปของคุณ เราจะหารือเกี่ยวกับการบันทึกแบบมีโครงสร้างและการบันทึกแบบรวมศูนย์โดยละเอียด นอกจากนี้ เราจะได้เรียนรู้วิธีใช้งานการบันทึก Laravel โดยการสร้างแอปพลิเคชัน Todo
คุณจะได้รับประโยชน์มากขึ้นจากบทความนี้หากคุณมีสิ่งต่อไปนี้ภายใต้เข็มขัดของคุณ:
- ความรู้ดีๆในการพัฒนาเว็บ
- ความเข้าใจพื้นฐานของ Laravel
- สร้างแอพด้วย Laravel
Laravel Logging คืออะไร?
การบันทึก Laravel เป็นข้อมูลเกี่ยวกับวิธีที่ Laravel จัดการกับการบันทึก หรือการรายงานปัญหาโดยอัตโนมัติ โดยใช้ระบบการบันทึก PHP แบบไวรัสที่เรียกว่า Monolog อย่างไรก็ตาม เนื่องจากปรัชญาของ Laravel ในการใช้ไลบรารีที่มีอยู่ซึ่งเป็นที่นิยมในการติดตั้งคุณลักษณะเฟรมเวิร์กต่างๆ Laravel จึงใช้ Monolog เพื่อตอบสนองความต้องการด้านการบันทึกทั้งหมด
Monolog เป็นไลบรารีการบันทึก PHP ที่มีความยืดหยุ่นสูงและเป็นที่นิยม ซึ่งเราสามารถกำหนดค่าให้ส่งบันทึกของคุณไปยังไฟล์ ซ็อกเก็ต ฐานข้อมูล และบริการเว็บอื่นๆ Monolog มีอินเทอร์เฟซที่คุ้นเคยสำหรับการเขียนบันทึกจากไฟล์ข้อความมาตรฐานไปจนถึงบริการจัดการบันทึกของบริษัทอื่นขั้นสูง โดยทั่วไป Laravel จะตั้งค่า Monolog ให้ใช้ไฟล์การกำหนดค่าการบันทึกมาตรฐาน
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Monolog และคุณลักษณะต่างๆ โปรดดูเอกสารประกอบอย่างเป็นทางการ เนื่องจากอยู่นอกเหนือขอบเขตของบทความนี้
ก่อนที่เราจะลงลึกในการกำหนดค่าและใช้งานการบันทึก Laravel โดยใช้ Monolog เรามาสำรวจเหตุผลเพิ่มเติมในการใช้การบันทึก Laravel และประเภทต่างๆ กัน
ทำไมต้องใช้การบันทึก Laravel?
ทำไมการบันทึกจึงจำเป็น?
แถลงการณ์ของแอพ Twelve-Factor ถือว่าการบันทึกเป็นหนึ่งในข้อกังวลที่สำคัญของแอปพลิเคชั่นที่ทันสมัย เนื่องจากการบันทึกเป็นกุญแจสู่ประสิทธิภาพและการตรวจสอบ
บันทึกช่วยในการทำความเข้าใจโดยละเอียดเกี่ยวกับข้อผิดพลาดที่เกิดขึ้นในการผลิตและที่มา นอกจากนี้ ด้วยโครงสร้างบันทึกที่เหมาะสม มันสามารถแสดงผู้ใช้เฉพาะ การดำเนินการที่ทำให้เกิดข้อผิดพลาด และวิธีแก้ปัญหาที่เป็นไปได้สำหรับการแก้ไขข้อผิดพลาดและการบำรุงรักษาที่รวดเร็วขึ้น
การบันทึกแบบมีโครงสร้างเป็นตัวช่วยชีวิตในแอปพลิเคชันการผลิตโดยช่วยแก้ไขปัญหาข้อบกพร่องและแก้ไขปัญหาในการผลิต นอกจากนี้ คุณสามารถตรวจสอบและรวบรวมข้อความบันทึกทั้งหมดของคุณแบบเรียลไทม์โดยใช้เครื่องมือบันทึกเฉพาะสำหรับการวิเคราะห์และการรายงานแบบสด
ด้วยเหตุผลเหล่านี้ คุณต้องทำให้การบันทึกแบบมีโครงสร้างมีความสำคัญสูงสุดในโครงการแอปพลิเคชันสมัยใหม่ครั้งต่อไปของคุณ
มาดูภาพรวมของรูปแบบการบันทึกต่างๆ ที่มี
พื้นฐานของการบันทึก Laravel
การเรียนรู้พื้นฐานของการบันทึกจะช่วยให้คุณเข้าใจว่า Laravel จัดการกับการบันทึกได้อย่างไร และคุณจะปรับปรุงแนวทางปฏิบัติด้านการบันทึกที่มีโครงสร้างได้อย่างไร
มาตรวจสอบแนวคิดที่สำคัญสองประการในการบันทึกเพื่อทำความเข้าใจวิธีการนำขั้นตอนการบันทึกของเราไปใช้ได้ดีขึ้น
การบันทึกโครงสร้าง Laravel
ในการพัฒนาซอฟต์แวร์ การบันทึกที่มีโครงสร้างจะใช้รูปแบบข้อความที่กำหนดไว้ล่วงหน้าและสอดคล้องกันสำหรับบันทึกแอปพลิเคชัน รูปแบบนี้ช่วยให้ข้อความได้รับการปฏิบัติเป็นข้อมูลที่สามารถตรวจสอบ จัดการ และแสดงภาพได้ดีกว่ารูปแบบข้อความปกติมาก
คุณต้องใช้วิธีการบันทึกที่มีโครงสร้างในการพัฒนาแอปพลิเคชันที่ทันสมัยของคุณ เนื่องจากไฟล์บันทึกเป็นทรัพย์สินที่จำเป็นสำหรับนักพัฒนาเมื่อมีสิ่งผิดปกติเกิดขึ้นกับแอปพลิเคชันของคุณในการผลิต
เนื่องจาก Laravel ใช้ Monolog นักพัฒนาจึงสามารถปรับใช้การบันทึกที่มีโครงสร้างได้อย่างรวดเร็วโดยกำหนดค่าตัวบันทึกเพื่อรับข้อมูลบางประเภท จัดเก็บไฟล์บันทึกในรูปแบบต่างๆ และส่งบันทึกไปยังบริการจัดการบันทึกของบริษัทอื่นสำหรับการแสดงภาพ
การบันทึกจากส่วนกลางของ Laravel
ระบบการบันทึกแบบรวมศูนย์คือที่ที่บันทึกจะถูกส่งไปยังโซลูชัน Centralized Log Management (CLM) จากหลายแหล่งเพื่อให้รวมและแสดงภาพได้ง่าย อย่างไรก็ตาม CLM เป็นโซลูชันตัวบันทึกเฉพาะที่รวบรวมข้อความบันทึกจากแหล่งต่าง ๆ และรวบรวมข้อมูลเพื่อการประมวลผลและการมองเห็นที่ง่ายดาย
นอกเหนือจากการเก็บรวบรวมข้อมูลแล้ว CLM ยังคาดว่าจะสนับสนุนการวิเคราะห์ข้อมูลบันทึกและการนำเสนอข้อมูลที่ชัดเจนหลังการวิเคราะห์
การบันทึกแบบมีโครงสร้างและการบันทึกแบบพื้นฐาน
มาตรวจสอบความแตกต่างระหว่างการบันทึกแบบมีโครงสร้างและการบันทึกแบบพื้นฐาน (ไม่มีโครงสร้าง) และเหตุผลที่คุณควรใช้การบันทึกแบบมีโครงสร้างในโครงการ Laravel ของคุณ
การบันทึกขั้นพื้นฐาน
ในการบันทึกพื้นฐาน ไฟล์บันทึกจะถูกจัดเก็บในรูปแบบดิบโดยมีข้อมูลจำกัดในการสืบค้นและระบุบันทึกแต่ละรายการ
เมื่อใช้การบันทึกแบบพื้นฐาน นักพัฒนาจะไม่สามารถใช้เครื่องมือวิเคราะห์ของบริษัทอื่นเพื่ออ่าน ดู และวิเคราะห์บันทึกได้ เว้นแต่จะพัฒนาเครื่องมือที่กำหนดเองหรือใช้เครื่องมือที่จำกัดซึ่งสนับสนุนรูปแบบบันทึกของตน
มีเหตุผลสำคัญสามประการที่จะหลีกเลี่ยงการใช้การบันทึกพื้นฐาน:
- ระบบการจัดการบันทึกจากส่วนกลางไม่สามารถทำงานกับข้อมูลได้หากไม่ได้รับการสนับสนุนเพิ่มเติม
- จำเป็นต้องใช้โซลูชันที่กำหนดเองเพื่ออ่านและแยกวิเคราะห์ข้อมูลของโซลูชันการบันทึกพื้นฐาน
- ผู้ดูแลระบบสามารถอ่านข้อมูลการบันทึกขั้นพื้นฐานได้ยาก เนื่องจากเป็นข้อมูลดิบและไม่มีโครงสร้าง
การบันทึกแบบมีโครงสร้าง
การบันทึกแบบมีโครงสร้างช่วยประหยัดเวลาของนักพัฒนาโดยใช้เครื่องมือวิเคราะห์บันทึกของบริษัทอื่นแบบโอเพนซอร์สที่รองรับโครงสร้างบันทึกมาตรฐานในการอ่าน ดู และวิเคราะห์บันทึก
บันทึกจะมีประโยชน์หากมีข้อมูลที่ถูกต้องตามรายการด้านล่าง ซึ่งเป็นเป้าหมายของการบันทึกที่มีโครงสร้าง เราสามารถใช้ข้อมูลที่รวมอยู่ในการบันทึกที่มีโครงสร้างเพื่อสร้างแดชบอร์ด กราฟ แผนภูมิ และการแสดงภาพข้อมูลที่เป็นประโยชน์อื่นๆ เพื่อกำหนดความสมบูรณ์ของแอปพลิเคชัน
นี่เป็นตัวอย่างพื้นฐานของข้อมูลที่เราสามารถรวมไว้ในข้อความบันทึกที่มีโครงสร้าง นอกจากนี้ คุณสามารถปรับแต่งข้อมูลให้เหมาะกับความต้องการของคุณได้อย่างสมบูรณ์
ต่อไปนี้คือตัวอย่างข้อมูลบางส่วนที่คุณรวบรวมได้ด้วยการบันทึกที่มีโครงสร้าง
- พอร์ตที่ใช้ในการรันฟังก์ชัน
- วันและเวลาที่เกิดเหตุ
- ชื่อผู้ใช้หรือ ID
- คำอธิบายของเหตุการณ์ (ข้อความบันทึก)
- โปรโตคอลที่ใช้ในการรันฟังก์ชัน
- ตำแหน่งของเหตุการณ์ที่ทริกเกอร์ (ระบุ API หรือแอปที่ทำงานอยู่)
- ID เหตุการณ์ที่ไม่ซ้ำกัน
- ประเภทของการดำเนินการที่ทริกเกอร์ (ระดับบันทึก)
บันทึกควรมีข้อมูลเพียงพอที่จะแสดงภาพโซลูชันหรือสาเหตุของเหตุการณ์บันทึกได้อย่างง่ายดาย นอกจากนี้ โปรดทราบว่าคุณไม่ควรจัดเก็บข้อมูลทุกประเภท เช่น รหัสผ่านหรือข้อมูลที่ละเอียดอ่อนในบันทึก
ตอนนี้เราได้เห็นแล้วว่าการบันทึกของ Laravel เกี่ยวกับอะไร มาดูการใช้งานการบันทึกของ Laravel กันโดยการสร้างแอปพลิเคชันที่มีการบันทึกเป็นพลเมืองชั้นหนึ่ง
วิธีใช้งานการบันทึก Laravel ด้วยแอพ Todo
ตอนนี้เราจะนำสิ่งที่เราได้เรียนรู้ไปใช้โดยการสร้างโปรเจ็กต์ Laravel ใหม่และนำการบันทึก Laravel ไปใช้
หากคุณไม่เคยใช้ Laravel มาก่อน คุณสามารถอ่านว่า Laravel คืออะไร หรือดูรายการบทแนะนำ Laravel ที่ยอดเยี่ยมของเราเพื่อเริ่มต้น
การตั้งค่า Laravel
ขั้นแรก เราจะสร้างอินสแตนซ์ Laravel ใหม่โดยใช้คำสั่งด้านล่าง คุณสามารถค้นหาเอกสารอย่างเป็นทางการสำหรับข้อมูลเพิ่มเติม
เปิดคอนโซลของคุณและไปยังตำแหน่งที่คุณจัดเก็บโครงการ PHP ของคุณก่อนที่จะเรียกใช้คำสั่งด้านล่าง ตรวจสอบให้แน่ใจว่าได้ติดตั้ง 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
การกำหนดค่าและการ Seeding ฐานข้อมูล
ต่อไป เราจะตั้งค่าฐานข้อมูลของเรา สร้างโมเดล Todo
ใหม่ และเริ่มต้นข้อมูลปลอม 200 รายการสำหรับการทดสอบ
เปิดไคลเอ็นต์ฐานข้อมูลของคุณและสร้างฐานข้อมูลใหม่ เราจะทำเช่นเดียวกันกับชื่อ laravel_logging_app_db
จากนั้นกรอกไฟล์ .env ของเราด้วยข้อมูลรับรองฐานข้อมูล:
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
ต่อไป เราจะเรียกใช้คำสั่งต่อไปนี้เพื่อสร้างการโยกย้ายและโมเดล Todo
พร้อมกัน:
php artisan make:model Todo -mc
เปิดการโยกย้ายที่สร้างขึ้นใหม่ซึ่งพบ ฐานข้อมูล/migration/xxx-create-todos-xxx.php และวางรหัสต่อไปนี้:
<?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'); } }
คุณสามารถ seed สิ่งที่ต้องทำของคุณด้วยข้อมูลปลอมโดยเรียนรู้ที่จะ seed ฐานข้อมูลของคุณใน Laravel โดยใช้ Faker
ภาพรวมของ Monolog
ด้วย Laravel Monolog คุณสามารถสตรีมและส่งบันทึกที่มีโครงสร้างไปยังช่องทางต่างๆ เช่น อีเมล, Slack, ไฟล์, ซ็อกเก็ต, กล่องจดหมาย, ฐานข้อมูล และบริการเว็บต่างๆ ใน Laravel คุณสามารถกำหนดค่าการบันทึกจากไฟล์การกำหนดค่าเดียวที่อยู่ใน config/logging.php
ไฟล์การกำหนดค่ามาพร้อมกับไดรเวอร์บันทึกที่กำหนดไว้ล่วงหน้าให้เลือก และไดรเวอร์เริ่มต้นคือ stack
กที่ใช้ช่องทาง single
เพื่อบันทึกไปยังไฟล์ laravel.log ที่พบในโฟลเดอร์การ จัดเก็บ/บันทึก เราจะสาธิตการบันทึกที่มีโครงสร้างโดยใช้ไดรเวอร์บันทึก Laravel สองสามตัว
Laravel มีวิธีการมากมายในการโต้ตอบกับ Logs ดังที่แสดงโดยทั่วไปในไฟล์ตัวควบคุม TodosController.php ในไม่ช้า
การเขียนข้อความบันทึกในคอนโทรลเลอร์
เปิดไฟล์ตัวควบคุม TodosController.php ที่สร้างขึ้นใหม่ซึ่งพบโฟลเดอร์ app/Http/Controllers และวางรหัสต่อไปนี้:
<?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
เราได้เพิ่มส่วนหน้า Log
ด้วยระดับบันทึกเฉพาะเพื่อกำหนดประเภทของข้อผิดพลาดที่เราต้องการส่ง ด้านล่างนี้คือตัวอย่างการใช้ the
เข้าสู่ระบบซุ้มในวิธีการ 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 }
การจัดรูปแบบข้อความบันทึก
สมมติว่าคุณไม่สะดวกใจกับ LineFormatter
เริ่มต้นที่ใช้โดย Laravel ซึ่งนำเสนอข้อความที่สามารถอ่านได้และเป็นประโยชน์ได้อย่างดีเยี่ยม
ในกรณีนั้น คุณสามารถหมุนออบเจ็กต์ฟอร์แมตเตอร์ที่กำหนดเองเพื่อให้เหมาะกับกรณีการใช้งานของคุณและใช้งานได้ตลอดทั้งแอปพลิเคชัน
เอกสารทางการของ Monolog แสดงรายการฟอร์แมตเตอร์ที่มีอยู่ทั้งหมด และสามารถสร้างฟอร์แมตเตอร์แบบกำหนดเองได้อย่างง่ายดาย
ใน Laravel คุณสามารถตั้งค่าไดรเวอร์ใดๆ เพื่อใช้ฟอร์แมตเตอร์แบบกำหนดเองของคุณได้อย่างง่ายดาย โดยเพิ่มลงในรายการด้านล่างภายในไฟล์การกำหนดค่าที่ 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', ] ],
ตัวอย่างด้านบนเพิ่ม MonologFormatterHtmlFormatter
แบบกำหนดเองให้กับไดรเวอร์ daily
โดยใช้ตัว formatter
และ formatter_with
คีย์ในการกำหนดค่าช่องสัญญาณ daily
เพื่อเปลี่ยนรูปแบบของวันที่
การส่งบันทึกไปยังช่องทางต่างๆ
ด้วยความช่วยเหลือของ Monolog Laravel สามารถส่งบันทึกไปยังช่องต่างๆ และหลายช่องพร้อมกันได้
มาสาธิตวิธีส่งบันทึกไปยังแชนเนล Slack ของเราโดยทำตามขั้นตอนง่ายๆ เหล่านี้ เปลี่ยนช่องบันทึกเริ่มต้นเป็น Slack และเพิ่ม Slack Webhook URL ในไฟล์ .env ของคุณ
LOG_CHANNEL=slack LOG_SLACK_WEBBHOOK_URL= Slack_webhook_url_here
ถัดไป ทดสอบการกำหนดค่าของคุณโดยบันทึกข้อความในแอปพลิเคชันของคุณโดยใช้ส่วนหน้า Log
เช่นเดียวกับที่แสดงด้านล่าง:
Log::debug("The API instance is on fire caused by:", ['user' => 1])
คุณสามารถเปิดช่อง Slack เพื่อตรวจสอบข้อผิดพลาดที่พิมพ์ในช่องที่คุณต้องการระบุเมื่อสร้าง Webhook URL
สรุป
การบันทึกมีความสำคัญพอๆ กับปัจจัยอื่นๆ ของแอปพลิเคชันของคุณ หากไม่มากกว่านั้น นั่นคือเหตุผลที่ประกาศแอพ Twelve-Factor App เป็นหนึ่งในข้อกังวลที่สำคัญที่สุดของแอปพลิเคชั่นที่ทันสมัย
ด้วยการบันทึกที่มีประสิทธิภาพ คุณสามารถอ่าน ดู และเห็นภาพข้อผิดพลาดและข้อบกพร่องที่เกิดขึ้นในแอปพลิเคชันที่พร้อมสำหรับการผลิตของคุณได้อย่างง่ายดาย ด้วยเหตุนี้ สิ่งสำคัญคือคุณต้องใช้การเข้าสู่ระบบแบบมีโครงสร้างในแอปพลิเคชันของคุณตั้งแต่เริ่มต้นโครงการ
ในบทความนี้ เราได้สำรวจการบันทึก Laravel และเหตุใดคุณจึงควรใช้ในโครงการถัดไปของคุณ เราได้พูดคุยถึงรายละเอียดทั้งการบันทึกแบบมีโครงสร้างและการบันทึกแบบรวมศูนย์ นอกจากนี้ เราได้เรียนรู้วิธีใช้งานการบันทึก Laravel โดยการสร้างแอปพลิเคชัน Todo
คุณวางแผนที่จะใช้การเข้าสู่ระบบในแอปถัดไปของคุณอย่างไร แจ้งให้เราทราบในส่วนความคิดเห็น