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

File log trong Rails

0 0 23

Người đăng: Khoa Tran Huy

Theo Viblo Asia

File log hoạt động như bản nhật ký của chương trình, nó ghi lại lịch sử hoạt động, những thay đổi của program qua thời gian hay thông tin các lỗi đã xảy ra...vv...
Chính vì vậy file log này đóng vai trò rất quan trọng khi vận hành system hay debug khi gặp lỗi.
Giả sử ta đã có sẵn một app rails có model tên là post. Bài viết này sẽ tóm tắt một số điều cần chú ý khi sử dụng file log trong Ruby on Rails.

Cách sử dụng log

1. Nơi xuất file log

Khi ta dùng terminal khởi động server rails thì log của app được xuất ra tự động ngay tại terminal. Ngoài ra log cũng được ghi lại trong file log/development.log.
Vì chúng ta dùng môi trường development để khởi động server nên log được xuất ra file development.log. Nếu chạy trên môi trường product thì là file log/production.log , nếu trên môi trường test thì là file log/test.log.

2. Tự xuất log theo ý thích

Trong rails, log sẽ được tự động xuất ra nhưng chúng ta cũng có thể tự xuất log theo ý thích bằng cách config lại controllermodel. Dùng object logger mặc định của rails để xuất log.

Ví dụ, khi ta muốn xuất thông tin của post vừa tạo ra để sử dụng cho debug thì ta sẽ thêm vào hàm create của file posts_controller.rb như sau:

...
def create
... if @post.save logger.debug "post: #{@post.attributes.inspect}" redirect_to @post, notice: "Post created" end
end
...

logger.debug "post: #{@post.attributes.inspect}" ta đã sử dụng method debug của object logger. Method debug đồng nghĩa với level debug.
Sau khi tạo post thành công, ở terminal cũng như trong file log/development.log sẽ có dòng như sau:

image.png

3. Level của log

Log có 6 loại level (độ quan trọng) như sau: debug, info, warn, error, fatal, unknown. Chúng ta có thể chỉ định file log xuất ra đến level nào. Vì mặc định trong log là debug level nên có thể xuất ra bất kỳ level nào.

Log level (số) Log level (chữ) Cách dùng method Ý nghĩa
5 unknown logger.unknown "..." Error không rõ nguyên nhân
4 fatal logger.fatal "..." Error nghiêm trọng không thể handling được
3 error logger.error "..." Error có thể handling được
2 warn logger.warn "..." Cảnh báo
1 info logger.info "..." Thông báo
0 debug logger.debug "..." Thông tin chi tiết dùng cho debug

Ta hoàn toàn có thể xem level của log hiện tại là gì bằng rails console với câu lệnh "logger.level".

Cài đặt log (logger)

1. Cài đặt level của log

Giả sử ta thêm config.log_level = :warn vào file config/environments.rb. Lúc này, file log chỉ có thể xuất ra được log có level warn trở lên mà thôi.

2. Lọc parameter trong log

Những parameter được truyền vào controller cũng sẽ được log xuất ra file. Điều này khá nguy hiểm nếu như những parameter được truyền vào có chứa những thông tin cần tính bảo mật như mật khẩu, số hiệu,....

Chính vì vậy ta cần phải config sao cho những thông tin cần bảo mật sẽ không bị xuất ra file log. Trong file config/initializers/filter_parameter_logging.rb, ta có thể cài đặt bằng Rails.application.config.filter_paramters để giấu đi những thông tin cần thiết. Mặc định trong rails sẽ là password:

Rails.application.config.filter_paramters += [:password]

Trong file log, các parameter được chỉ định sẽ xuất ra dưới dạng [FILTER], ví dụ: image.png

3. Cài đặt logger chung cho ứng dụng

Lấy log của mỗi ngày bằng daily. Các log trong quá khứ sẽ được xuất ra dưới file dạng log/development.log/yyyymmdd
config/environments/development.rb

config.logger = Logger.new('log/development.log', 'daily')

Ta cũng hoàn toàn có thể thay daily bằng weekly hay monthly.
Nếu muốn chia file log tùy theo ý muốn.
config/environments/development.rb

config.logger = Logger.new('log/development.log', 'daily')
config.custom_logger = Logger.new('log/custom.log', 'weekly')

Gọi log đã được cài đặt bằng:

logger.debug 'Output logger`
Rails.application.config.custom_logger.debug 'Output custom_logger'

4. Tạo original logger

Ta cũng có thể tạo file log chỉ liên quan đến model `post` bằng cách thêm method `post_logger` vào controller như sau:
app/controller/posts_controller.rb
def post_logger @post_logger ||= Logger.new('log/post.log', 'daily')
end post_logger.debug "Output post_loggger"

Bằng cách làm trên, log của post sẽ được ghi lại trong file log/post.log

5. Cài đặt format cho logger

Format của logger được config bằng config.logger.format trong file config/environments/development.rb.
Có 4 biến có thể sử dụng là: severity (log level), timestamp (thời gian), progname (tên program khi tạo file log) và msg (message của chương trình).
config/environments/development.rb

config.logger.format = proc {|severity, timestamp, progname, message | "#{timestamp} :#{severity}: #{message}\n"
}

Bài viết đến đây là kết thúc, mọi người cùng đọc và góp ý nhé !



Bình luận

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

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

Tôi cá là bạn không biết những điều này - Ruby on rails ( Phần 2)

Các bạn có thể theo dõi phần 1 ở đây :. https://viblo.asia/p/toi-ca-la-ban-khong-biet-nhung-dieu-nay-ruby-on-rails-phan-1-WAyK8DDeKxX. 5.

0 0 222

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

Rails Memoization

Memoization is a process that can be used to speed up rails methods. It caches the results of methods that do time-consuming work, work that only needs to be done once. Here is an example. Example.

0 0 48

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

Tại sao Rails lại dùng cả Webpack lẫn Sprocket?

Khi Rails 6 được ra mắt, có thể bạn đã từng tự hỏi. WTF, sao Webpack đã được add vào rồi, mà Sprocket vẫn tồn tại thế kia . Chẳng phải Webpack và Sprocket được dùng để giải quyết chung một công việc hay sao. Hoặc cả đây:.

0 0 59

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

Bạn nên sử dụng Elasticsearch trong ứng dụng Ruby On Rails như thế nào?

Elasticsearch là một công cụ phân tích và mã nguồn mở mạnh mẽ và linh hoạt, phân tán, theo thời gian thực. Đó là tiêu chuẩn vàng trong công nghệ tìm kiếm.

0 0 80

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

Form object pattern trong rails

1.Mở đầu.

0 0 111

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

Sử dụng Twilio để gửi SMS trong ứng dụng Ruby on Rails

Ngoài cách xác nhận tài khoản hay gửi thông báo bằng email thì hôm nay mình sẽ hướng dẫn các bạn 1 cách nữa là thông qua SMS/Voice. Công cụ sử dụng sẽ là gem Twilio. Installation. Để cài đặt bằng Bundler, hãy lấy phiên bản mới nhất:.

0 0 67