Config sentry.io để làm logging cho web application (Laravel)

Spread the love

Lần này mình sẽ hướng dẫn cách add sentry để làm logger cho laravel project, cụ thể ở đây là Askvietnamese một trang cms sử dụng Octobercms

Sơ lược

What the hell is sentry?

Ngày xưa mình chơi dota, sentry còn gọi là mắt xanh, dùng để thấy các quân tàng hình (Bone, Riki , Bounty Hunter…), nói chung là để phát hiện các heroes đó không dễ, sentry wards chính là một thứ
* Rẻ (200 gold 3 lần dùng)
* Không sợ mất ( tất nhiên bọn kia ko lượm được như dùng Gem of True sight)
* JIT : tạm gọi là Just In Time, cần thì dùng, dù không tiện, nhưng có phải lúc nào cũng có quân tàng hình ở xung quanh ta đâu ??

Thôi linh tinh thế là đủ, chúng ta quay lại với sentry.io

Sentry là một open-source tracking tool giúp thông báo các lỗi xuất hiện trên web-server

Sentry sẽ thông báo cho tôi những gì ?

Đây là những gì mình nhận được từ sentry

Tuyệt vời, nó bao gồm một vài thứ như
* environment : tôi cá là có lúc tôi mở development environment lên để check bug production ( nếu có ai đó chỉ rõ hơn cho tôi lỗi ở đâu thì tốt )
* server_name: không phải lúc nào tôi cũng chỉ có 1 server, việc có server name rõ ràng giúp tôi ssh đúng vào server đang dính lỗi hơn
* url: đôi khi lội cả buổi trời trong log (grep , grep and grep) chỉ để tìm được URL của người dùng để tái hiện
* stack_trace: càng rõ ràng về line of code bị lỗi càng tốt 😀
* request info: có cả header, cookies và parameters , khôgn tái hiện được bug nữa thì …

Sentry thông báo cho tôi qua những kênh nào ?

Ok. Khá đầy đủ rồi đấy. Giờ thì cài sentry vào thôi

Cài đặt sentry vào dự án hiện tại

Mình sẽ hướng dẫn cài sentry với

Thông qua composer

Cài đặt thông qua composer là nhanh và tiện nhất

composer require sentry/sentry

Với Laravel 5.4 trở về trước

Do không có chức năng Package Auto-Discovery nên các bạn chịu khó làm thêm bước sau:

'providers' => array(
    // ...
    Sentry\SentryLaravel\SentryLaravelServiceProvider::class,
)

'aliases' => array(
    // ...
    'Sentry' => Sentry\SentryLaravel\SentryFacade::class,
)

Cấu hình để Sentry bắt được exception

Chúng ta phải chỉnh sửa một chút trong cơ chế default bắt lỗi của Laravel để sentry bắt được exception và log lên hệ thống như bên dưới

public function report(Exception $exception)
{
    if (app()->bound('sentry') && $this->shouldReport($exception)) {
        app('sentry')->captureException($exception);
    }

    parent::report($exception);
}

Chạy câu lệnh để publish configuration file của sentry

php artisan vendor:publish --provider="Sentry¥Sentry¥Laravel¥SentryLarravelServiceProvider"

Thêm DSN của sentry vào file .env

Thông tin về DSN của sentry bạn sẽ lấy được khi tạo project mới trong sentry
(ví dụ của mình là ở : Login | Sentry)

SENTRY_LARAVEL_DSN=https://[xxxx]@sentry.io/[yyyy])

Với các step trên là chúng ta đã hoàn tất và có thể thực hiện xem log lỗi trong dashboard của sentry.
Khá là hay phải không nào

TLDR;

Khi thực hiện một project, không phải chúng ta cứ code xong function là xong, chúng ta còn phải nghĩ đến cách tracking bugs và exceptions xảy ra khi user thao tác với hệ thống. Và nhất là chúng ta đừng mong đợi user sẽ report bugs

Leave a Reply

Your email address will not be published. Required fields are marked *