@@ -58,10 +58,20 @@ def is_appropriate_env?
5858
5959 def log_message_task level , msg , call_trace
6060 Stackify ::ScheduleTask . new ( { limit : 1 } ) do
61- e = Exception . new ( msg )
62- e . set_backtrace ( call_trace )
63- ex = StackifiedError . new ( e , binding ( ) )
64- Stackify . msgs_queue << Stackify ::MsgObject . new ( level , ex . message , caller [ 0 ] , ex ) . to_h
61+ if %w( error fatal ) . include? ( level )
62+ ex = if ruby_exception? ( msg ) && msg . class != Class
63+ msg . set_backtrace ( call_trace )
64+ msg
65+ else
66+ e = StringException . new ( msg )
67+ e . set_backtrace ( call_trace )
68+ e
69+ end
70+ ex = StackifiedError . new ( ex , binding ( ) )
71+ Stackify . msgs_queue << Stackify ::MsgObject . new ( level , ex . message , caller [ 0 ] , ex ) . to_h
72+ else
73+ Stackify . msgs_queue << Stackify ::MsgObject . new ( level , msg , caller [ 0 ] ) . to_h
74+ end
6575 end
6676 end
6777
@@ -70,6 +80,16 @@ def log_exception_task level, ex
7080 Stackify . msgs_queue << Stackify ::MsgObject . new ( level , ex . message , caller [ 0 ] , ex ) . to_h
7181 end
7282 end
83+
84+ def ruby_exception? klass
85+ klass = klass . class == Class ? klass : klass . class
86+ klasses = [ klass ]
87+ while klass != Object do
88+ klasses << klass . superclass
89+ klass = klass . superclass
90+ end
91+ klasses . include? ( Exception )
92+ end
7393 end
7494
7595end
0 commit comments