κΈ°λ₯ μ μμ²νκ±°λ λ²κ·Έλ₯Όλ³΄κ³ νμκ² μ΅λκΉ?
κ³€μΆ©.
νμ¬ νλμ 무μμ
λκΉ?
λλλ‘ (νμμ μλ) μ€λ₯μ message
μμ±μ΄ [object ErrorEvent]
λ‘ κΈ°λ‘λ©λλ€. https://docs.sentry.io/clients/javascript/integrations/angular/μ μ€λͺ
λλλ‘ Angularμμ Ravenμ νμ€ κ΅¬νμ λ°λμ΅λλ€
μμλλ λμμ 무μμ
λκΉ?
μ μμ μΈ μ€λ₯ λ©μμ§λ₯Ό λ³΄λ €λ©΄.
λ μ΄λΈ 3.17.0
κ°λ 4.3.1
Webpack λΉλ
CLIλ₯Ό μ¬μ©νμ§ μμ
CDN λ²μ
Angular λ¬Έμ μ΄λκ°μ ErrorEvent
μ μ μκ° μμ΅λκΉ? λΆλͺ
ν μ΄κ²μ Error
λ₯Ό μ¬λ°λ₯Έ λ°©λ²μΌλ‘ "μμ"νλ κ²μ΄ μλλλ€.
λ¬Έμ λ TraceKitμ traceKitWindowOnError()
λ©μλμμμ μ μμ§λ§ message
μΈμκ° ErrorEvent
μΌ μ μλ€λ μ μ κ³ λ €νμ§ μλ κ² κ°μ΅λλ€ ( MDN λ¬Έμ μ°Έμ‘°).
@benvinegar μ¬κΈ° ErrorEvent
μ λͺ κ°μ§ λ¬Έμκ° μμ΅λλ€ : https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent
μ΄κ²μ μν₯μλ°λ μ¬μ©μλ λ€μκ³Ό κ°μ΅λλ€.
https://forum.sentry.io/t/reporting-object-errorevent/1807
[email protected] (κ·Έλ¬λ μ΄μ λ²μ μμλ νλμ λ°μνμ΅λλ€)
κ°λ 4.x
CLI μ¬μ©
Ionic 3 λ° [email protected] κ³Ό λμΌν©λλ€.
<script>
undefined.foo();
</script>
^ μ΄κ²μ λΉμ μ htmlμμ [object ErrorEvent]
λ‘ μΌνΈλ¦¬λ₯Ό ν΅ν΄ safariμ λ‘κ·ΈμΈλ©λλ€. μ¬λ°λ₯Έ λ©μμ§λ TypeError: undefined is not an object (evaluating 'undefined.foo')
μ
λλ€.
iframe μμ±μ μλνλ μ€ν¬λ¦½νΈ νκ·Έλ₯Ό ν΅ν΄ μ½λλ₯Ό μ½μ
νλ μΈλΆ μ€ν¬λ¦½νΈκ° μμ§λ§ μ¬ν리μ μν΄ μ°¨λ¨λ©λλ€. μ½μ
λ μ€ν¬λ¦½νΈ νκ·Έμμ μ€λ₯κ° λ°μνλ―λ‘ μΌνΈλ¦¬λ [object ErrorEvent]
λ§λ³΄κ³ ν©λλ€.
[object Event]
λ‘λ³΄κ³ λ μΌνΈλ¦¬μ λ λ€λ₯Έ μ€λ₯λ flowplayerμμ λ°μνμ΅λλ€. Flowplayerλ
jQueryElement.trigger('error', [api, {code: 5}]);
jQueryλ₯Ό μλ² λ©νμ¬ μ¬ν ν μ μμ΅λλ€.
$('div:first').trigger('error')
μΌνΈλ¦¬λ μ΄λ° κ±Έ λ³Έλ€
λ¬Όλ‘ λ§€μ° μ§λ ¬ννμ§ κ·Έκ² μ λΆμ§λ§, κ°μ μ€λ₯ error on element from jQuery - context <div class="foo><div class="bar" ...
ν¨μ¬ λ λμμ΄ λ€μμ΄ λ κ²μ
λλ€ [object Event]
μ΄κ²μ μν₯λλ°μ΅λλ€.
@daangeerdink @jdelaune @rosslavery @tgensol λκ΅°κ°κ° μ΄κ²μ μ¬ννλ λ° λμμ΄ λ μμλ κ°μ₯ μμ μ½λλ₯Ό μ 곡 ν μ μμ΅λκΉ?
@sod λ°©κΈ νμΈνκ³ Safari 10.1.2λ μμμ μΈκΈ ν μλ리μ€μμ μ¬λ°λ₯Έ λ©μμ§λ₯Ό μ 곡ν©λλ€.
μ€λ₯κ° λ무 λΆν¬λͺ ν΄μ μ½λλ² μ΄μ€μ μ΄λ λΆλΆμμ μ€λ₯κ° λ°μνλμ§ μλ³ ν μ μκΈ° λλ¬Έμ κ°μΈμ μΌλ‘ μ¬νμ μ 곡 ν μ μμ΅λλ€. μμ ν μ€ν μΆμ λμκ³ λ΄ μ½λμΈμ§ νμ¬ λΌμ΄λΈλ¬λ¦¬μΈμ§ νμΈνλ μ€λ₯ λ©μμ§λ μμ΅λλ€.
λ€λ₯Έ μ¬λμ΄ μ 곡 ν μμλ κ°λ¨ν μκ° μκΈ°λ₯Ό λ°λλλ€. λ μ΄μ λμμ΄λμ§ λͺ»ν΄ μ£μ‘ν©λλ€.
μ°λ¦¬λμ΄ λ¬Έμ λ₯Ό κ²ͺκ³ μμ΅λλ€. μ§λ 10 μΌ λμμ μΌλΆ λ°μ΄ν°λ₯Ό 곡μ ν μ μμ΅λλ€ (μ΄ μ νμ μ΄λ²€νΈ 22,000 κ°, μ¬μ©μ 13,000 κ°). λλ κ·Έκ²μ΄ λΉμ μ΄ κ·Έκ²μ μ¬ννλ λ° λμμ΄λκΈ°λ₯Ό λ°λλλ€.
@kamilogorek μ΄ μ νμ μ€λ₯λ 2 λ°±λ§ κ°μ λλ€. λ¬Έμ λΌκ³ μκ°νμ§λ§ μ λλ‘ μΆμ ν μ μμμ΅λλ€.
λ¬Έμ λ₯Ό λ°κ²¬νμ΅λλ€. ErrorEvent
λ μ¬κΈ° μμ μ°Ύμ μμλ isError
util ν¨μμ μν΄ μ€λ₯λ‘ μ²λ¦¬λμ§ μμ΅λλ€. νΈμλ₯Ό μν΄ ν¨μ μ μλ λΆμ¬ λ£κ² μ΅λλ€.
function isError(value) {
switch ({}.toString.call(value)) {
case '[object Error]':
return true;
case '[object Exception]':
return true;
case '[object DOMException]':
return true;
default:
return value instanceof Error;
}
}
μ΄ ν¨μκ° ErrorEvent
λν΄ trueλ₯Ό λ°ννλμ§ μ¬λΆλ₯Ό νμΈνκΈ° μν΄ μ½μμμ λΉ λ₯Έ ν
μ€νΈλ₯Ό μννμ§λ§ μ€ν¨νμ΅λλ€.
isError
λ captureException
λ©μλμμ μμΈ λ§€κ° λ³μκ° μ€λ₯μΈμ§ μλλ©΄ λ¨μν λ©μμ§μΈμ§λ₯Ό κ²°μ νλ λ° μ¬μ©λ©λλ€. captureException
λ μμΈκ° _ μ€μ λ‘ _ μ€λ₯κ° μλλΌκ³ μκ°νλ κ²½μ° captureMessage
μ¬μ©νμ¬ λμ 보λμ μμΈλ₯Ό 보λ
λλ€. μ΄ κ²½μ° Ravenμ μ€ν μΆμ μ κ³μ°νκ±°λ μμΈλ₯Ό "μ²λ¦¬"νμ§ μμ΅λλ€. κ·Έλ₯ κ·Έλλ‘ λ³΄λ
λλ€.
ErrorEvent
κ°μ²΄μ λν΄ trueλ₯Ό λ°ννλλ‘ isError
λ₯Ό μ
λ°μ΄νΈνμ§ μμμΌνλ μ΄μ κ° μμ΅λκΉ?
ErrorEvent κ°μ²΄μ λν΄ trueλ₯Ό λ°ννλλ‘ isErrorλ₯Ό μ λ°μ΄νΈνμ§ μμμΌνλ μ΄μ κ° μμ΅λκΉ?
μ. μ€μ λ‘ Error
μ νμ νλͺ©μ΄ μλκΈ° λλ¬Έμ
λλ€ ( Event
μ νμ νλͺ©). μλ₯Ό λ€μ΄ stack
μμ±μ΄ μμ΅λλ€ (AFAICT, μ½μμμ λκΈ°). μ΄λ μ€μ λ‘ μ¬λ°λ₯΄κ² μ²λ¦¬λμ§ μμ μ μμμ μλ―Έν©λλ€.
μ΄ μ€λ₯κ° μ€μκ°μΌλ‘ μμ±λλ λ°©λ²μ μλ₯Ό νμΈνμ¬μ΄λ₯Ό μ²λ¦¬νλ κ°μ₯ μ’μ λ°©λ²μ νμ νλ κ²μ΄ μ’μ΅λλ€.
ErrorEvent
μ μμ±μλ Error
λ₯Ό μ¬μ©νλ―λ‘ λ€μκ³Ό κ°μ΄ μ½κ² μ²λ¦¬ ν μ ββμμ΅λλ€.
if (isErrorEvent(ex)) {
ex = ex.error;
}
μ¬κΈ° μμ κ΅¬μ± μ μλ₯Ό λ³Ό μ μμ΅λλ€. νΉν ErrorEventInit
ν΄μλ₯Όλ³΄μμμ€. μ νμ λ§€κ° λ³μμ΄λ―λ‘ μμ κ²μ ν μ루μ
μ΄ ErrorEvent.error
κ° μ μλμ§ μμ κ²½μ°λ₯Ό μ²λ¦¬νμ§ λͺ»νλ κ² κ°μ΅λλ€.
λ¬Όλ‘ ,μ΄ λ¬Έμ κ° ν΄κ²° λ μ μλ€κ³ μκ°ν©λλ€. isError
λ₯Ό μΆκ°νμ¬ true
λ₯Ό λ°ννλ κ²λ§ νΌ κ°λ¨νμ§ μλ€λ μλ―Έμ
λλ€.
μ΄ν΄ νμ΄μ. λͺ λΆ νμ PRμ μ¬λ¦΄ κ²μ.
3.19.x
μμ μμ λ¨
κ°μ¬ν©λλ€ @shcallaway! π
3.19.1
π€μμ μ¬μ νμ΄ λ¬Έμ κ° λ°μνλ κ² κ°μ΅λλ€.
@PhilippSpo μ΄ μ΄λ²€νΈλ μ΄λ€ λΈλΌμ°μ μμ λ°μν©λκΉ? ErrorEvent
λ μΌλΆ μ€λλ λͺ¨λ°μΌ λΈλΌμ°μ λ° IEμμ μ§μλμ§ μμΌλ―λ‘ μΌλ° μ루μ
μΌλ‘ λ체ν΄μΌνμ΅λλ€.
@kamilogorek ν¬λ‘¬ 61.0.3163
Chrome 61μμλ λ³Ό μ μμ΅λλ€. π 곧 μ‘°μ¬ν΄ λ³΄κ² μ΅λλ€.
κ°μ¬ν©λλ€ @shcallaway
Safari 11.0, Mac OS 10.13μμλ λ°μν©λλ€.
'message'λ§€κ° λ³μκ° ErrorEvent κ°μ²΄ μΈ κ²½μ° traceKitWindowOnError κ° μ
λ ₯ λ§€κ° λ³μλ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νμ§ λͺ»νλ κ² κ°μ΅λλ€.
κ·Έλ¦¬κ³ 'ex'λ μ μλμ§ μμμ΅λλ€. κ·Έλ° λ€μ 'message'νλκ° λ¬Έμμ΄μ΄ μλ ErrorEvent μΈ κ°μ²΄λ‘ notifyHandlersλ₯Ό νΈμΆν©λλ€.
_makeRequestμμ κ³μΈ΅ν λλ©΄ μλ―Έμλ λ©μμ§λ₯Ό μμ±ν©λλ€.
@ michal-rumanekμ μ‘°μ¬ν΄ μ£Όμ μ κ°μ¬ν©λλ€.μ΄ λ¬Έμ λ₯Ό 곧 μ²λ¦¬νλλ‘ λ Έλ ₯νκ² μ΅λλ€ (μ΄λ² μ£Όμλ μ¬μ μκ° μμ).
@kamilogorek , μ§ν μν©μ΄ μμ΅λκΉ? ;-)
μλ
νμΈμ, [object Object]
μ€λ₯κ° λ§μ΄ λ°μν©λλ€.
κ°λ 4
Chrome 62.0.3202
Raven-js 3.20.1
https://github.com/getsentry/raven-js/pull/1162 μμ μμ λμμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
λ¬Έμ λ₯Ό λ°κ²¬νμ΅λλ€.
ErrorEvent
λ μ¬κΈ° μμ μ°Ύμ μμλisError
util ν¨μμ μν΄ μ€λ₯λ‘ μ²λ¦¬λμ§ μμ΅λλ€. νΈμλ₯Ό μν΄ ν¨μ μ μλ λΆμ¬ λ£κ² μ΅λλ€.μ΄ ν¨μκ°
ErrorEvent
λν΄ trueλ₯Ό λ°ννλμ§ μ¬λΆλ₯Ό νμΈνκΈ° μν΄ μ½μμμ λΉ λ₯Έ ν μ€νΈλ₯Ό μννμ§λ§ μ€ν¨νμ΅λλ€.isError
λcaptureException
λ©μλμμ μμΈ λ§€κ° λ³μκ° μ€λ₯μΈμ§ μλλ©΄ λ¨μν λ©μμ§μΈμ§λ₯Ό κ²°μ νλ λ° μ¬μ©λ©λλ€.captureException
λ μμΈκ° _ μ€μ λ‘ _ μ€λ₯κ° μλλΌκ³ μκ°νλ κ²½μ°captureMessage
μ¬μ©νμ¬ λμ 보λμ μμΈλ₯Ό 보λ λλ€. μ΄ κ²½μ° Ravenμ μ€ν μΆμ μ κ³μ°νκ±°λ μμΈλ₯Ό "μ²λ¦¬"νμ§ μμ΅λλ€. κ·Έλ₯ κ·Έλλ‘ λ³΄λ λλ€.ErrorEvent
κ°μ²΄μ λν΄ trueλ₯Ό λ°ννλλ‘isError
λ₯Ό μ λ°μ΄νΈνμ§ μμμΌνλ μ΄μ κ° μμ΅λκΉ?