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 ของคุณ

การบันทึกขั้นพื้นฐาน

ในการบันทึกพื้นฐาน ไฟล์บันทึกจะถูกจัดเก็บในรูปแบบดิบโดยมีข้อมูลจำกัดในการสืบค้นและระบุบันทึกแต่ละรายการ

เมื่อใช้การบันทึกแบบพื้นฐาน นักพัฒนาจะไม่สามารถใช้เครื่องมือวิเคราะห์ของบริษัทอื่นเพื่ออ่าน ดู และวิเคราะห์บันทึกได้ เว้นแต่จะพัฒนาเครื่องมือที่กำหนดเองหรือใช้เครื่องมือที่จำกัดซึ่งสนับสนุนรูปแบบบันทึกของตน

มีเหตุผลสำคัญสามประการที่จะหลีกเลี่ยงการใช้การบันทึกพื้นฐาน:

  1. ระบบการจัดการบันทึกจากส่วนกลางไม่สามารถทำงานกับข้อมูลได้หากไม่ได้รับการสนับสนุนเพิ่มเติม
  2. จำเป็นต้องใช้โซลูชันที่กำหนดเองเพื่ออ่านและแยกวิเคราะห์ข้อมูลของโซลูชันการบันทึกพื้นฐาน
  3. ผู้ดูแลระบบสามารถอ่านข้อมูลการบันทึกขั้นพื้นฐานได้ยาก เนื่องจากเป็นข้อมูลดิบและไม่มีโครงสร้าง

การบันทึกแบบมีโครงสร้าง

การบันทึกแบบมีโครงสร้างช่วยประหยัดเวลาของนักพัฒนาโดยใช้เครื่องมือวิเคราะห์บันทึกของบริษัทอื่นแบบโอเพนซอร์สที่รองรับโครงสร้างบันทึกมาตรฐานในการอ่าน ดู และวิเคราะห์บันทึก

บันทึกจะมีประโยชน์หากมีข้อมูลที่ถูกต้องตามรายการด้านล่าง ซึ่งเป็นเป้าหมายของการบันทึกที่มีโครงสร้าง เราสามารถใช้ข้อมูลที่รวมอยู่ในการบันทึกที่มีโครงสร้างเพื่อสร้างแดชบอร์ด กราฟ แผนภูมิ และการแสดงภาพข้อมูลที่เป็นประโยชน์อื่นๆ เพื่อกำหนดความสมบูรณ์ของแอปพลิเคชัน

นี่เป็นตัวอย่างพื้นฐานของข้อมูลที่เราสามารถรวมไว้ในข้อความบันทึกที่มีโครงสร้าง นอกจากนี้ คุณสามารถปรับแต่งข้อมูลให้เหมาะกับความต้องการของคุณได้อย่างสมบูรณ์

ต่อไปนี้คือตัวอย่างข้อมูลบางส่วนที่คุณรวบรวมได้ด้วยการบันทึกที่มีโครงสร้าง

  1. พอร์ตที่ใช้ในการรันฟังก์ชัน
  2. วันและเวลาที่เกิดเหตุ
  3. ชื่อผู้ใช้หรือ ID
  4. คำอธิบายของเหตุการณ์ (ข้อความบันทึก)
  5. โปรโตคอลที่ใช้ในการรันฟังก์ชัน
  6. ตำแหน่งของเหตุการณ์ที่ทริกเกอร์ (ระบุ API หรือแอปที่ทำงานอยู่)
  7. ID เหตุการณ์ที่ไม่ซ้ำกัน
  8. ประเภทของการดำเนินการที่ทริกเกอร์ (ระดับบันทึก)

บันทึกควรมีข้อมูลเพียงพอที่จะแสดงภาพโซลูชันหรือสาเหตุของเหตุการณ์บันทึกได้อย่างง่ายดาย นอกจากนี้ โปรดทราบว่าคุณไม่ควรจัดเก็บข้อมูลทุกประเภท เช่น รหัสผ่านหรือข้อมูลที่ละเอียดอ่อนในบันทึก

ตอนนี้เราได้เห็นแล้วว่าการบันทึกของ 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

ดิ้นรนกับการหยุดทำงานและปัญหา WordPress? Kinsta เป็นโซลูชันโฮสติ้งที่ออกแบบมาเพื่อช่วยคุณประหยัดเวลา! ตรวจสอบคุณสมบัติของเรา

ภาพรวมของ 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

คุณวางแผนที่จะใช้การเข้าสู่ระบบในแอปถัดไปของคุณอย่างไร แจ้งให้เราทราบในส่วนความคิดเห็น