- vừa được xem lúc

Logging trong Laravel

0 0 18

Người đăng: phptojvb

Theo Viblo Asia

Giới thiệu

  • Để giúp bạn biết hệ thống đang xảy ra vấn đề gì trong hệ thống, Laravel cung cấp các dịch vụ ghi log mạnh mẽ cho phép bạn ghi log vào file, vào log hệ thống hoặc thậm chí là Slack để thông báo cho toàn bộ team của bạn
  • Không chỉ để giúp bạn debug mà nó còn giúp bạn ghi lại những lịch sử thực thi theo mong muốn
  • Laravel sử dụng thự viện Monolog để cung cấp và hỗ trợ nhiều cách xử lý log khác nhau. Bạn cũng có thể cấu hình lại hoặc kết hợp sử dụng để xử lý log theo ý muốn

1. Cấu hình và các loại channel driver

Tất cả cấu hình log nằm trong file config/logging.php Mặc định Laravel sẽ sử dụng stack channel để lưu log

  • Các channel drivers Có rất nhiều loại log channel mà Laravel cung cấp. Tùy theo yêu cầu của dự án mà bạn có thể sử dụng 1 hoặc kết hợp nhiều loại channel log dưới đây:

    Name Description
    custom Driver cho phép bạn gọi đến một class factory để tạo ra 1 channel mới
    daily Sử dụng RotatingFileHandler class ghi log và file log sẽ được sinh ra hàng ngày
    errorlog Sử dụng ErrorLogHandler class ghi log và file log ghi vào errorlog của php
    monolog Là một factory driver cho phép bạn sử dụng bất kỳ mọi Monolog handled nào
    null Là một driver bỏ qua tất cả các log
    papertrail Sử dụng SyslogUdpHandler class ghi log và log sẽ được lưu trữ trên cloud
    monolog Là một factory driver cho phép bạn sử dụng bất kỳ mọi Monolog handled nào
    single Là một driver cho phép bạn lưu log vào 1 file duy nhất
    slack Sử dụng SlackWebHookHandler để ghi log đến slack - 1 ứng dụng chat
    stack Cho phép bạn có thể sử dụng nhiều channel
    syslog Sử dụng SyslogHandler để ghi log đến system log của hệ điều hành

  • Channel Single và Daily : Riêng channel single và daily có thêm 3 option config : buble, permissionlocking

    Name Description Default
    bubble Cho phép ghi log vào những channel khác không ví dụ như khi dùng stack true
    locking Lock lại file log trước khi ghi vào false
    permission Tùy chọn permissions cho file log 0644

  • Daily channel: có thêm tùy chọn days là số ngày file log được giữ, mặc định sẽ là 7 ngày.

  • Papertrail channel : sẽ cần config host và port của cloud bạn dùng để ghi log

  • Slack channel: sẽ cần url configuration, mặc định slack sẽ chỉ nhận các log ở mức critical trở lên

  • Deprecations log: Để log lại những cảnh báo về những feature không dùng tới nữa thì sử dụng deprecations

image.png

  • Log level : emergency, alert, critical, error, warning, notice, info, and debug.

2. Chỉ định 1 log channel khác

  • Sử dụng 1 log channel khác với channel mặc định ta sử dụng Log facade để truy xuất và log vào bất kỳ channel nào đã định nghĩa:

    use Illuminate\Support\Facades\Log; Log::channel('slack')->info('Something happened!'); 
  • Để tạo logging stack theo mong muốn bạn sử dụng stack method:

    Log::stack(['single', 'slack'])->info('Something happened!');
    
  • Tạo 1 channel mong muốn bằng cách cung cấp 1 mảng cấu hình vào build method:

    use Illuminate\Support\Facades\Log; Log::build([ 'driver' => 'single', 'path' => storage_path('logs/custom.log'),
    ])->info('Something happened!');
    

3. Tạo custom channel bằng cách tạo Factory class

  • Trước tiên bạn cần phải tạo 1 factory class, class này sẽ trả về 1 Monolog instance. Trong class này bạn sẽ cần định nghĩa 1 method là __invoke, method này cần truyền vào 1 mảng cấu hình :

     namespace App\Logging; use Monolog\Logger; use Monolog\Handler\StreamHandler; class CustomLogger { public function __invoke(array $config) { $logger = new Logger($config['name']); $logger->pushHandler(new StreamHandler($config['path'], $config['level'])); return $logger; } }
    
  • Sau đó định nghĩa custom log channel của bạn trong config/longging.php, sử dụng via để trỏ đến class factory của bạn vừa tạo ở trên

    'channels' => [ // ... 'custom' => [ 'driver' => 'custom', 'via' => App\Logging\CustomLogger::class, 'name' => 'my-channel', 'path' => storage_path('logs/my-channel.log'), 'level' => 'debug', ],
    ],
    
  • Là bạn đã có thể sử dụng custom channel của mình

    use Illuminate\Support\Facades\Log; // ... Log::channel('custom')->debug('This is a debug message for my custom channel');
    

Bình luận

Bài viết tương tự

- vừa được xem lúc

Triển khai EFK Stack trên Kubernetes

EFK stack on K8S. Giới thiệu. Một hệ thống có thể chạy nhiều dịch vụ hoặc ứng dụng khác nhau, vì vậy việc. theo dõi hệ thống là vô cùng cần thiết.

0 0 72

- vừa được xem lúc

[Spring] - Spring logback config

Trong spring boot có nhiều cách để cấu hình logging. Với mình thì mình thường làm là config trong file aplication.properties hay application.yml hoặc file logback.

0 0 42

- vừa được xem lúc

Ghi Log Messages trong quá trình phát triển hệ thống, ứng dụng phần mềm

Lang thang vào viblo xem mấy thông báo 'bài viết XYZ của bạn đã được upvote' hay 'Trần X, Phạm Y... đã theo dõi bạn' mình tình cờ thấy được thông báo này của Viblo. Và chắc chắn rồi, đầu năm người Việ

0 0 33

- vừa được xem lúc

[K8S] Phần 12 - Logging trên k8s - section1

Lời tựa. Tiếp tục series về Kubernetes, mình sẽ giới thiệu với các bạn về một chủ đề rất quan trọng đó là Logging.

0 0 33

- vừa được xem lúc

[K8S] Phần 14 - Logging trên k8s sử dụng ELK - section3

Lời tựa. Trong 2 bài viết trước mình đã tự đặt ra bài toán logging cho hệ thống cũng như xây dựng xong môi trường gồm các service opensource và tự build.

0 0 49

- vừa được xem lúc

[K8S] Phần 13 - Logging trên k8s sử dụng ELK - section2

Lời tựa. Tiếp tục về chủ đề logging trên Kubernetes, bài viết này sẽ đi vào xây dựng môi trường và thiết kế giải pháp trước khi xây dựng hệ thống logging ELK.

0 0 35