12/09/2019, 14:12

Một số tip debug trong Laravel

Người viết: Hoàng Nguyễn Xin chào anh em, cũng lâu lâu mình cũng chưa viết bài chia sẻ. Trong bài này mình muốn chia sẻ cho các bạn về các tip debug trong Laravel nhé. Như các bạn biết đấy, khi chúng ta code thì hầu hết đa phần chúng ta không thể nào code đúng ngay được, có khi gặp ...

tip debug trong Laravel

Người viết: Hoàng Nguyễn

Xin chào anh em, cũng lâu lâu mình cũng chưa viết bài chia sẻ. Trong bài này mình muốn chia sẻ cho các bạn về các tip debug trong Laravel nhé. Như các bạn biết đấy, khi chúng ta code thì hầu hết đa phần chúng ta không thể nào code đúng ngay được, có khi gặp những lỗi mình không biết nó từ đâu sinh ra.

Xem thêm Debug là gì

Vì vậy, việc debug rất quan trọng khi chúng ta lập trình. Trong bài viết này, mình sẽ giới thiệu các bạn cách sử dụng một số công cụ hỗ trợ việc phát triển và debug trong Laravel 5 nhé.tip debug trong Laravel

Đầu tiên chúng ta sẽ tải project mới về bằng composer nhé:

Sau đó chúng ta vào file .env để config database:

Chúng ta sẽ thực thi câu lệnh php artisan migrate để nó migration các bảng có sẵn nhé để chúng ta dùng. Sau đó mình fake dữ liệu bằng cách sau:

Sau đó chúng ta tạo UserController nhé. Xong phần set up cái project mẫu để chúng ta có thể sử dụng các tip debug dưới đây thông qua ví dụ nhé.

  JavaScript Tip: Đặt tên function để debugging một cách dễ dàng hơn
  Hướng dẫn cấu hình Xdebug bằng PHPStorm cho Docker

Hàm dd()

Hàm này được dùng trong việc muốn xem xem kết quả trả ra là cái gì. Nó được dùng để phục vụ cho việc bạn muốn xem đầu ra của dữ liệu. Chúng ta thường xuyên sau khi query xong nó trả về cái gì, liệu nó là Collection hay Eloquent, hay là một mảng dữ liệu gì đó.

Nhiều khi các bạn sử dụng thư viện Transformer để trả về kiểu dữ liệu theo một quy chuẩn nào đó… Việc dd() ra dữ liệu đầu ra giúp các bạn dễ dàng trong việc hiển thị kết quả đó ra một cách dễ dàng.

Bây giờ chúng ta sẽ lấy về tất cả các User nhưng chúng ta không biết kết quả trả về như nào cả thì chúng ta có thể dùng hàm dd() để có thể xem được nó trả về những gì nhé.

Kết quả là như này:tip debug trong LaravelNếu như các bạn muốn xem rõ hơn nữa trong User nó có những thuộc tính gì thì các bạn cứ ấn vào để xem nhé, rất chi tiết.

Hàm var_dump()

Hàm var_dump() cũng tương tự như dd() , nó cũng sẽ in ra thông tin của biến gồm kiểu dữ liệu của biến và giá trị.

Tương tự như vậy mình cũng sẽ thay đổi code như sau:

Một điều đặc biệt các bạn sẽ thấy đó chính là khi gặp hàm var_dump() chương trình của chúng ta không dừng mà vẫn chạy tiếp cho đến đoạn return $users. Vì thế khi muốn dừng thì các bạn phải kết hợp với die() nhé:

tip debug trong Laravel Nó sẽ trả ra cho các bạn một chuỗi lằng nhằng để format lại các bạn ấn CTRL + U của trình duyệt chrome nhé, thì nó sẽ ra cho bạn như này nhìn nó dễ nhìn hơn. tip debug trong Laravel

print_r()

Hàm print_r() sẽ in biến ra thông tin của biến truyền vào một cách dễ hiểu, nó thường xuyên được kết hợp với thẻ <pre> trong các trường hợp in mảng, đối tượng,…

Kết quả hiện thị:tip debug trong Laravel Thật dễ dàng phải không các bạn, mình vừa giới thiệu qua một số hàm của PHP rồi. Nối tiếp bài viết, mình sẽ giới thiệu cho các bạn về Laravel Logger nhé.

Laravel Logger

Logging là một tính năng phổ biến, và mặc định Laravel sử dụng Monolog cho việc ghi tất cả log cần thiết, nó là một thư viện phổ biến PHP logging. Một điều mà Monolog mà nó mang lại rất hay là nó cung cấp một interface chung cho chúng ta có thể viết log bất cứ thứ gì, đơn giản là nó ghi ra file log hay đến sử dụng bến những third-party log management services.

Monolog có tính linh hoạt cao, nó có thể gửi lỗi mà được log lại vào file , socket, email, databases và một vài các web service khác nữa. Laravel thường thiết lập Monolog thông qua file cấu hình.

Logging configuration

File config logging sẽ nằm ở thư mục config/logging.php. Đầu tiên chúng ta sẽ thấy 2 phương thức của Monolog được import vào để hỗ trợ việc xử lý cho các channel. Các bạn sẽ thấy từ khóa được return về default và channels.

Các kênh là những nơi nhận nhiệm vụ báo log cho chúng ta.

Như các bạn thấy có rất nhiều các kênh đảm nhiệm việc báo log cho người dùng. stack là kênh mặc định để gửi log. Chúng mình sẽ đi tìm hiểu chi tiết hơn về cấu hình các kênh này nhé.

Configuration within each channel

Ứng với mỗi key channel các bạn có thể nhìn thấy một mảng các key khác nhau được sử dụng.

Đầu tiên là drivers:

  • single: Viết log vào một single file, mặc định, nó thường được ghi vào storage/logs/laravel.log.
  • daily: Ý là nếu cần ghi log thì nó sẽ tạo 1 file mới có ngày tháng năm trong tên file log đó. VD: storage/logs/laravel-2019-09-01.log
  • errorlog: Nơi mà lỗi được lưu log nó phụ thuộc vào web server của bạn. Ví dụ bạn dùng nginx thì nới lưu log sẽ là /var/log/nginx/error.log.
  • syslog: cái này nó cũng phụ thuộc vào server OS của các bạn.

Đó là 4 driver mà đã có từ phiên bản 5.7 trở về trước, từ phiên bản 5.7 trở đi thì được support thêm một vài driver nữa

  • stack: Khi sử dụng driver này tứ là bạn có thể sử dụng nhiều logging channel cùng với nhau. Khi đó bạn phải set thêm key channel với giá trị là một mảng tên các key channel nhé.
  • slack: Channel này cho phép bạn gửi log đến the popular social channel. Ví dụ như chúng ta dùng chatwork, chúng ta có thể báo lỗi về tin nhắn cho chúng ta.
  • monolog: Đây là khi monolog sử dụng lại chính nó, và khi các bạn sử dụng driver này các bạn sẽ sử dụng các method của chính nó nữa. Các bạn sử dụng nó thông qua từ khóa handler nhé.

Writing log message

Như các bạn biết đấy, chúng ta hoàn toàn có thể ghi log vào trong thư mục storage/logs bằng cách sử dụng facade Log. Nhật ký lỗi được ghi nhận với 8 cấp độ khác nhau theo tiêu chuẩn RFC 5424: