Ruby: improved logging of exceptions without backtraces.

If an exception was raised with a backtrace of zero length, the
nxt_ruby_exception_log() routine would return without logging the
exception class and message.  This commit fixes the issue.
This commit is contained in:
Oisin Canty
2021-07-01 11:16:43 +00:00
parent cfba69781a
commit 830729a6c5

View File

@@ -1069,14 +1069,18 @@ nxt_ruby_exception_log(nxt_unit_request_info_t *req, uint32_t level,
return; return;
} }
eclass = rb_class_name(rb_class_of(err));
msg = rb_funcall(err, rb_intern("message"), 0);
ary = rb_funcall(err, rb_intern("backtrace"), 0); ary = rb_funcall(err, rb_intern("backtrace"), 0);
if (nxt_slow_path(RARRAY_LEN(ary) == 0)) {
if (RARRAY_LEN(ary) == 0) {
nxt_unit_req_log(req, level, "Ruby: %s (%s)", RSTRING_PTR(msg),
RSTRING_PTR(eclass));
return; return;
} }
eclass = rb_class_name(rb_class_of(err));
msg = rb_funcall(err, rb_intern("message"), 0);
nxt_unit_req_log(req, level, "Ruby: %s: %s (%s)", nxt_unit_req_log(req, level, "Ruby: %s: %s (%s)",
RSTRING_PTR(RARRAY_PTR(ary)[0]), RSTRING_PTR(RARRAY_PTR(ary)[0]),
RSTRING_PTR(msg), RSTRING_PTR(eclass)); RSTRING_PTR(msg), RSTRING_PTR(eclass));