Tôi đang làm việc trên dự án đường ray và tôi đang cố gắng để có ngoại lệ được ghi vào tệp nhật ký đường ray. Tôi biết tôi có thể gọi logger.error $!
để nhận được dòng đầu tiên của ngoại lệ được ghi vào tệp. Nhưng, tôi muốn có được toàn bộ dấu vết ngăn xếp được đăng nhập là tốt. Làm cách nào để đăng nhập toàn bộ dấu vết của một ngoại lệ bằng trình ghi nhật ký đường ray mặc định?Làm cách nào để ghi lại toàn bộ dấu vết của ngoại lệ Ruby bằng trình ghi nhật ký Rails mặc định?
Trả lời
logger.error $!.backtrace
Ngoài ra, đừng quên bạn có thể
rescue ErrorType => error_name
để cung cấp cho lỗi lầm của mình một tên biến khác với mặc định $!
.
logger.error caller.join("\n")
nên thực hiện thủ thuật.
Cách đường ray không nó là
137 logger.fatal(
138 "\n\n#{exception.class} (#{exception.message}):\n " +
139 clean_backtrace(exception).join("\n ") +
140 "\n\n"
141 )
248 def clean_backtrace(exception)
249 if backtrace = exception.backtrace
250 if defined?(RAILS_ROOT)
251 backtrace.map { |line| line.sub RAILS_ROOT, '' }
252 else
253 backtrace
254 end
255 end
256 end
Trong Rails, ActionController::Rescue
giao dịch với nó. Trong ứng dụng hành động điều khiển của tôi, tôi đang sử dụng phương pháp log_error
từ mô-đun này để khá định dạng vết lùi trong nhật ký:
def foo_action
# break something in here
rescue
log_error($!)
# call firemen
end
log_error không hoạt động trong Rails 3 nữa – Priit
Đây là cách tôi sẽ làm điều đó:
Đây là tài liệu hướng dẫn ri cho Exception # backtrace:
Lưu ý rằng bạn coul d cũng sử dụng Kernel # caller, cung cấp cho bạn dấu vết đầy đủ (trừ khung curent).
Ngoài ra - Lưu ý rằng nếu bạn đang cố gắng để bắt tất cả trường hợp ngoại lệ, bạn nên giải cứu từ ngoại lệ, không RuntimeError.
Trong các phiên bản sau này của Rails, chỉ cần bỏ ghi chú dòng sau trong RAIL_ROOT/config/initializers/backtrace_silencers.rb (hoặc thêm file này chính nó nếu nó không có):
# Rails.backtrace_cleaner.remove_silencers!
Bằng cách này bạn sẽ có được đầy đủ backtrace được ghi vào nhật ký trên một ngoại lệ. Điều này làm việc cho tôi trong v2.3.4.
Có vẻ như không hoạt động trong 2.3.9 –
Đó là một phần của tài liệu dành cho Rails 3.2.3. Xem tại đây: http://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.html – Rob
- 1. Ghi nhật ký ngoại lệ bằng cách sử dụng Log4Net
- 2. Làm cách nào để ghi lại ngoại lệ bằng Sphinx
- 3. Capybara: dấu vết ngoại lệ trong nhật ký
- 4. Ghi nhật ký ngoại lệ SignalR?
- 5. ngoại lệ ghi nhật ký trong C#
- 6. Trình ghi nhật ký ngoại lệ: Thực tiễn tốt nhất
- 7. Ghi nhật ký toàn cầu của Python
- 8. Ghi nhật ký an toàn
- 9. Ghi nhật ký ngoại lệ trong WCF bằng IErrorHandler bên trong HandleError hoặc ProvideFault?
- 10. Nhận dấu vết ngăn xếp hiện tại trong Ruby mà không cần nêu một ngoại lệ
- 11. Tại sao .NET không ghi nhật ký ngăn xếp cho các ngoại lệ StackOverflow?
- 12. Làm cách nào để ghi đè hộp thoại ngoại lệ chưa được xử lý mặc định?
- 13. Làm thế nào để định dạng dấu vết ngăn xếp của ngoại lệ trong C#?
- 14. Ghi nhật ký RestClient trong ứng dụng Rails
- 15. Spring MVC không ghi lại tất cả ngoại lệ
- 16. Làm cách nào để tôi có một ngoại lệ và giữ lại dấu vết ngăn xếp?
- 17. Ghi nhật ký CherryPy: Làm cách nào để định cấu hình và sử dụng trình ghi nhật ký cấp độ toàn cầu và ứng dụng?
- 18. Làm cách nào để tránh lặp lại chính mình khi tạo trình ghi nhật ký?
- 19. Ghi nhật ký an toàn đa luồng
- 20. Ghi nhật ký bằng Python từ nhiều quá trình
- 21. Cách bật ghi nhật ký của Ehcache
- 22. Dấu vết ngăn xếp ngoại lệ Javascript
- 23. Ghi nhật ký với Vala
- 24. Lỗi ghi nhật ký có lập trình Với Elmah: Ghi nhật ký thông tin cụ thể
- 25. Tôi có thể tắt tiêu đề nhật ký cho trình ghi nhật ký ruby không?
- 26. Sử dụng mô đun ghi của python để ghi lại tất cả ngoại lệ và lỗi
- 27. Thực hiện ghi nhật ký an toàn theo chủ đề
- 28. Ghi nhật ký Java - cách chuyển hướng đầu ra sang tệp nhật ký tùy chỉnh cho trình ghi nhật ký?
- 29. Làm cách nào để có được google guice để chèn trình ghi nhật ký tùy chỉnh, hãy nói nhật ký ghi nhật ký hoặc log4j
- 30. Không thể định cấu hình nhật ký ghi lại
Tôi có thiếu gì đó không? logger.error chỉ nhận một đối số duy nhất, vì vậy mã đó không hoạt động ... –
Cái này không hoạt động, sử dụng 'logger.error e.message +" \ n "+ e.backtrace.join (" \ n ") 'thay thế. –
Tôi có thể thề nhiều thông số đã hoạt động cách đây 4 năm, nhưng có lẽ nó không. Tôi đã cập nhật nó để chỉ đăng nhập backtrace, mà có vẻ là khía cạnh có liên quan nhất của câu hỏi; Tôi tin tưởng người đọc có thể tìm ra nhiều cuộc gọi logger là có thể, ditto cho chuỗi nối (hoặc nhiều hơn Ruby-y, nội suy). –