Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Thành Thạo Logging Ruby: Theo Dõi Sự Kiện & Lỗi Hiệu Quả

Logging là quá trình lưu thông tin về việc ứng dụng Ruby của bạn đang làm gì. Rất hữu ích, cả môi trường development & production.

Tại sao? Vì mục đích logging là thu thập thông tin về gì đã xảy ra, gì sai & gì đúng. Nhiều loại thông tin có thể log:

  • Slow SQL query (để tìm & fix)
  • Thông báo lỗi
  • Chi tiết request (URL, Controller, Params, Views...)

Với thông tin này, bạn chẩn đoán & tìm nguồn gốc vấn đề app nhanh hơn. Trong Rails app, log lưu dưới thư mục /log. Development mode dùng file development.log & bạn thấy output log trên terminal chạy rails server.

Bây giờ: Hãy học cách logging trong Ruby dùng class Logger!

Class Logger

Class Logger Ruby cho cách tạo log với định dạng output mặc định & các mức severity (nghiêm trọng) khác nhau.

Cách tạo log:

 logger = Logger.new("my_log.txt") 

Sẽ ghi log vào my_log.txt. Muốn hiển thị trên terminal, log vào STDOUT. Như sau:

 logger = Logger.new(STDOUT) 

Log message có mức khác nhau tùy mức độ quan trọng. Các mức:

  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
  • UNKNOWN

Mỗi mức có instance method tương ứng. Muốn log "info": Làm:

 logger.info("I'm reading a RubyGuide about logging!") 

Entry log thực tế trông như:

 # I, [2019-08-08T19:22:00.152079 #642] INFO -- : I'm reading a RubyGuide about logging! 

Các mức khác nhau giúp lọc file log, tìm nhanh thứ bạn cần! Cũng giúp thấy bao nhiêu error & warn theo thời gian. Tuyệt vời!

Cách Định Dạng Log

Dùng định dạng mặc định tốt vì công cụ có thể xây dựng xung quanh & nhiều người hiểu cách hoạt động. Dòng log lại:

 # I, [2019-08-08T19:22:00.152079 #642] INFO -- : test 

Có vài thành phần:

  • "I" đại diện chữ cái đầu của mức severity
  • Trong ngoặc vuông: timestamp & process id (PID) của process sinh log
  • INFO là tên đầy đủ mức severity
  • Sau dấu hai chấm: message thực tế được log

Nhưng định dạng này có thể không lý tưởng cho mọi người. Ruby cho phép thay đổi! Cách làm:

 logger.formatter = proc { |severity, datetime, progname, msg| "#{severity}, #{datetime}, #{msg}\n" } 

Kết quả output:

 DEBUG, 2019-08-08 19:39:01 +0200, testing 

Bạn dùng thêm thông tin hữu ích cho team.

Cách Giới Hạn Kích Thước Log

Log có thể thành file rất lớn trừ khi theo dõi kích thước. Nếu hết ổ cứng vì log, mọi thứ kỳ lạ xảy ra. Có giải pháp! Giới hạn kích thước log. Cách làm:

 MEGABYTE = 1024 ** 2
ONE_HUNDRED_MEGABYTES = MEGABYTE * 100
logger = Logger.new("my_log.txt", 1, ONE_HUNDRED_MEGABYTES) 

Tham số 1: nơi lưu log. Tham số 2: số file log giữ (log rotation), tham số cuối: kích thước file tối đa.

Đọc & Lọc Log

Đã có log. Làm sao đọc & tìm thứ cần? Log là file plain-text, dùng bất kỳ công cụ xử lý text nào. Ví dụ: Grep. Công cụ command-line lọc file text. Cách:

 grep INFO my_log.txt 

Đưa ra mọi dòng log ở mức "INFO". Tìm bất kỳ text nào trong log dùng grep, thay "INFO" bằng từ khóa. Công cụ Unix khác là less (với option -R). Cho scroll log chỉ bằng bàn phím & có tìm kiếm. Cũng dùng... Tool chuyên biệt quản lý & tìm kiếm log. Như gem logster của Discourse.

Tóm Tắt

Bạn đã học logging trong Ruby, nó là gì, cách hoạt động, và cách dùng. Bây giờ lượt bạn thử. Cảm ơn bạn đã đọc!