Sentry-javascript: ์ด์ „ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ธํ•ด [๊ฐ์ฒด ์ด๋ฒคํŠธ]๊ฐ€ ๊ธฐ๋ก๋จ

์— ๋งŒ๋“  2015๋…„ 08์›” 03์ผ  ยท  50์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: getsentry/sentry-javascript

์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์— ๋Œ€ํ•œ ์ด ์Šค๋ ˆ๋“œ์— ์„ค๋ช…๋œ ๋Œ€๋กœ window.onerror ๋กœ ์ „์†ก๋œ ํŠน์ • ์ด๋ฒคํŠธ๋Š” [object Event] ๊ฐ€ ๋ฉ”์‹œ์ง€๋กœ ๊ธฐ๋ก๋˜๊ณ  ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ์€ ๊ธฐ๋ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Sentry๊ฐ€ ์ด๋Ÿฌํ•œ ๊ณ ๋Œ€์˜ Event ๊ฐœ์ฒด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ฐพ์•„๋‚ด์–ด Sentry์— ๊ธฐ๋ก๋œ ๋‚ด์šฉ์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@rollokb โ€“ ์ด์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  50 ๋Œ“๊ธ€

๋กœ๊ทธ์˜ ํ•œ ํŠน์ • ์ƒ˜ํ”Œ์€ ๋‹ค์Œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ €: ๋Œํ•€ 3.0
  • ์žฅ์น˜: ์‚ผ์„ฑ GT-S8600
  • OS: ๋ฐ”๋‹ค 2.0

ํƒ€์‚ฌ Android ํœด๋Œ€์ „ํ™”(์˜ˆ: Samsung, HTC)์—์„œ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” Android 4.1~4.4์˜ Android ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ์œ ์‚ฌํ•˜๊ฒŒ ๋ฐ›๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Nexus ํœด๋Œ€์ „ํ™”๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์ด๋ฉฐ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์–ด๋ ต์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๊ฐœ์ฒด์˜ ์†์„ฑ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด message.toString() == '[object Event]' $ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ for-in ๋ฃจํ”„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Android 4.1 - 4.4์—์„œ ์‚ฌ์ดํŠธ์˜ ๋””๋ฒ„๊ทธ ๋ฌธ์ œ๋ฅผ ๋•๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

@d10 โ€“ ์‹คํ—˜ํ•ด ๋ณด์•˜์ง€๋งŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. BrowserStack์—์„œ Android 4.1 โ€“ 4.4๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๊ณ  ๊ธฐ๋ณธ Android ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์˜ค๋ฅ˜๋ฅผ ์ œ๋Œ€๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์ข‹์€ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” ์ด์ „ ๋ธŒ๋ผ์šฐ์ €์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ๋ฏธ์น˜๊ฒŒ ๋งŒ๋“ค์—ˆ์œผ๋ฏ€๋กœ https://github.com/rollokb/raven-js/tree/feat/old-webkit-Event-handling ์— ๋Œ€ํ•œ ํŒจ์น˜๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ œ์ถœํ•˜๊ธฐ ์ „์— ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ž ์‹œ ํ…Œ์ŠคํŠธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@rollokb โ€“ ์ปค๋ฐ‹์ด ๋ฉ‹์ง€๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ƒ์‚ฐ๋˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๋‚˜์ค‘์— ๋งˆ์Šคํ„ฐ์— ๋ณ‘ํ•ฉํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์—„์ฒญ๋‚œ! ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ๋ฏธ์น˜๊ฒŒ ๋งŒ๋“ค๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค! +1

ํ”„๋กœ๋•์…˜์—์„œ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ํ•˜๋‹ค:

์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋‚ด๊ฐ€ ์ง์ ‘ ํŠธ๋ฆฌ๊ฑฐํ•œ ์ด๋ฒคํŠธ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์ด๋ฒคํŠธ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋‚ด๊ฐ€ ์ง์ ‘ ํŠธ๋ฆฌ๊ฑฐํ•œ ์ด๋ฒคํŠธ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์ด๋ฒคํŠธ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

+        for (var property in event) {
+            if (event.hasOwnProperty(property)) {
+                options.extra[property] = event[property];
+            }
+         }

hasOwnProperty ๋ฅผ ํ™•์ธํ•˜๋ฉด Event.prototype ์—์„œ ํŒŒ์ƒ๋œ ์†์„ฑ์„ ์–ป์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ…Œ์ŠคํŠธ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ(์ž์‹ ์ด ์ƒ์„ฑํ•˜๋Š” Event ๊ฐœ์ฒด์— ์ง์ ‘ ์†์„ฑ์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ) ๋ฐ์ดํ„ฐ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ํ•ด๋‹น ์ฒดํฌ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์˜ค๋ฅ˜์™€ ๊ด€๋ จ์ด ์—†๋Š” ๋งŽ์€ ์†์„ฑ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฐ ๋ชจ์Šต์„ ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์„์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์˜ณ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. PhantomJS๋กœ ํ…Œ์ŠคํŠธํ•  ๋•Œ ๋‚˜๋Š” ์ด๊ฒƒ์— ์‚ฌ๋กœ์žกํ˜”์Šต๋‹ˆ๋‹ค.

์ง€์ ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/rollokb/raven-js/blob/feat/old-webkit-Event-handling/src/raven.js#L1109 -L1121

์‹œ์›ํ•œ. ๋‹ค์‹œ ํ•œ ๋ฒˆ, ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์ œ์—์„œ ์•ฝ๊ฐ„ ๋ฒ—์–ด๋‚˜์ง€๋งŒ ์ด ํ”„๋กœ์ ํŠธ์— PhantomJS๊ฐ€ ์–ด๋–ป๊ฒŒ ๋กœ๋“œ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๋ฒคํŠธ ์†์„ฑ์„ ์ž˜๋ชป ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์ฆ‰, ๋ชจ๋“  Event props๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ด…๋‹ˆ๋‹ค).

kmiyashiro/grunt-mocha ๊ฒฝ์œ 

https://github.com/getsentry/raven-js/blob/master/Gruntfile.js#L193

์ด๋ฒคํŠธ ์†์„ฑ์„ ์ž˜๋ชป ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์ฆ‰, ๋ชจ๋“  Event props๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ด…๋‹ˆ๋‹ค).

Chrome/๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ด€์ฐฐ๋˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” Event ๊ฐ์ฒด๋ฅผ ์กฐ๋กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋ฅผ ๋ณด๋‚ด๋Š” ๋ ˆ๊ฑฐ์‹œ ๋ธŒ๋ผ์šฐ์ €๋„ ๋น„์Šทํ•˜๊ฒŒ ๋Š๊ปด์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.)

๋™์ž‘์ด ๋” ์ •ํ™•ํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Phantom2๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ๋„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์ด ์ง€๊ธˆ 1.9.8์„ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

@rollokb โ€“ ์ด์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ค๋Š˜ Android 4์˜ Facebook Browser v80์—์„œ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํŒŒ์ผ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ์˜ค๋ž˜๋œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?

Android ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์žˆ๋Š” Android 4.x์—์„œ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜ Android 4์˜ Facebook Browser v80์—์„œ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํŒŒ์ผ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ์˜ค๋ž˜๋œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?

๋‚˜๋Š” "Facebook Browser"๊ฐ€ ๋‚ด๋ถ€ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฌด์—‡์ด๋“  ๊ฐ„์— Facebook์„ ๊ฐ์‹ธ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ์˜ค๋ฅ˜๋Š” ์—ฌ๋Ÿฌ ๊ตญ์ œ ๋ฒ„์ „์˜ Android ํœด๋Œ€ํฐ์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์žฅ์น˜ ๋ชฉ๋ก์„ ์‚ดํŽด๋ณด๋ฉด ๋ถ๋ฏธ/์„œ์–‘ ๋ชจ๋ธ์ด ์•„๋‹Œ Samsung GT-S8600๊ณผ ๊ฐ™์€ ์žฅ์น˜ ์ฝ”๋“œ๊ฐ€ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ "Chrome Mobile" ๋˜๋Š” "Android ๋ธŒ๋ผ์šฐ์ €"(์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š” ์‰ฝ๊ฒŒ ์œ„์กฐ๋จ)๋ผ๊ณ  ์ฃผ์žฅํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ผ๋ถ€ ํฌํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€๋งŒ ๋‹ค๋ฅธ ์˜ค๋ฅ˜ ๊ฐœ์ฒด ์„œ๋ช…์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ์ง€๋งŒ(์‚ฌ๋ฌด์‹ค์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ์ „ํ™” ์ค‘ ์ผ๋ถ€๋ฅผ ๊ตฌ์ž…ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ), ์กฐ๋งŒ๊ฐ„ ๋‹ค์‹œ ์‹œ๋„ํ•ด ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋“œ๋ฌธ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Chrome 51.0.2704๊ฐ€ ์„ค์น˜๋œ Windows 10์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•, ์–˜๋“ค์•„!

๋˜ํ•œ ๋‚˜๋Š” Raven ๋ณด๊ณ ์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

...
"exception": {
  "values": [
    {
      "value": "[object Event]",
      "stacktrace": {
        "frames": [
          ...
        ]
      }
    }
  ]
}

Android์˜ ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š”
Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; GT-N7100 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

์ด๊ฒƒ์— ๋Œ€ํ•ด +1

๋”ฐ๋ผ์„œ 3.7.0๋ถ€ํ„ฐ [object Event] ๋ฐ ๊ธฐํƒ€ catch๋œ ๋น„ ์˜ค๋ฅ˜ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ํ•ฉ์„ฑ ์ถ”์ ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 3.7.0์„ ์‹œ๋„ํ•˜๊ณ  ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@benvinegar 3.7.0์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€๋งŒ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ•ดํ‚น์„ ์ž„์‹œ ์†”๋ฃจ์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    Raven.install();

    if (Raven._processException) {
        const oldProcessException = Raven._processException;

        Raven._processException = function (event, message) {
            if (message && typeof message === 'object') {
                // detect that it's an event
                if (String(message) === '[object Event]') {
                    // message
                    message = stringifyEvent(message);

                    // type
                    event = event || 'event';
                } else {
                    // stringify the other objects
                    try {
                        message = JSON.stringify(message);
                    } catch (e) {
                        //
                    }
                }

                arguments[0] = event;
                arguments[1] = message;
            }

            return oldProcessException.apply(this, arguments);
        };
    }

    function stringifyEvent (event) {
        const data = {
            eventPhase: event.eventPhase,
            type: event.type,
            isTrusted: event.isTrusted,
            returnValue: event.returnValue,
            timeStamp: event.timeStamp
        };

        if (event.target) {
            data.target = {
                src: event.target.src,
                tagName: event.target.tagName || 'UNKNOWN_HTMLELEMENT',
                className: event.target.className,
                readyState: event.target.readyState
            };
        }

        if (event.path) {
            data.path = event.path.map((el) => {
                const tagName = el.tagName || 'UNKNOWN_HTMLELEMENT';
                const className = (el.className || '').replace(/\s+/, '');

                // DIV.class-1.class-2
                return `${ tagName }.${ className }`;
            });
        }

        return JSON.stringify(data);
     }

@webschik ์ด ์ค„์˜ ์˜คํƒ€์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

return `${ tagName }.${ className }`;

๊ทธ๋ฆฌ๊ณ ์ด ๊ฑด์„ค์ด ํ—ˆ์šฉ๋˜๋Š”์ง€ ํ™•์‹ ํ•ฉ๋‹ˆ๊นŒ?

data.path = event.path.map((el) => {

UP: ์ด ์ˆ˜์ •์œผ๋กœ "์˜ˆ๊ธฐ์น˜ ์•Š์€ ํ† ํฐ =>" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ

@webschik

2016-09-23 12 45 43

@AlexanderMatveev , ES2015 ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.
๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ๊ต์ฒด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

@webschik ์ด ํ•ดํ‚น์„ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์—ฌ์ „ํžˆ "[๊ฐ์ฒด ์ด๋ฒคํŠธ]" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@AlexanderMatveev , ์ด๊ฒƒ์ด ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ๊ฑฐ๊ธฐ์—์„œ ๋” ๋งŽ์€ ์กฐ์‚ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

@webschik

์Šคํฌ๋ฆฝํŠธ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<script type="text/javascript" src="[raven.min.js version 3.7.0]"></script>
<script>
    Raven.config('https://[...]@sentry.io/[...]', {
        release: '[...]'
    }).install();
</script>
<script type="text/javascript" src="[fix.js without first Raven.install() line]"></script>

@benvinegar 3.7.0์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€๋งŒ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ทธ๊ฒƒ์„ ์–ป์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฐจ์ด์ ์€ ํ•ฉ์„ฑ ์Šคํƒ ์ถ”์ ์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด window.onerror๊นŒ์ง€ ๋ฒ„๋ธ”๋ง๋˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ์ฐฉ๋œ๋‹ค๋ฉด ์Šคํƒ ์ถ”์ ์€ ๋„์›€์ด ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ํฌ์ฐฉ๋˜๋Š” ๋ฐฉ์‹์„ ์•Œ๋ ค์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

ํ˜ธ์ŠคํŒ…๋œ Sentry for UA์—์„œ Raven 3.6.1 ์™€ ๋™์ผํ•จ: Mozilla/5.0 (Linux; U; Android 3.1; en-gb; GT-P7500 Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13

๋˜ํ•œ ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„์€ Android ๋˜๋Š” Facebook ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์ด์–ด์•ผ ํ•˜๋Š” Facebook 95.0์—์„œ๋„ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ 4. . ๋ฉ”์ธ OS์ด๋ฉฐ ๋ณด๊ณ ๋œ ๋งŽ์€ ์žฅ์น˜๋Š” Samsung-GT[๋ฌด์–ธ๊ฐ€]์ž…๋‹ˆ๋‹ค. 3.7.0 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ํŠน๋ณ„ํ•œ ์žฅ์น˜๊ฐ€ ์—†๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ์—์„œ๋„ ์ด๊ฒƒ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36

๋ ˆ์ด๋ธ 3.9.0

์—ฌ์ „ํžˆ 3.9.1์—์„œ ํ•˜๋ฃจ์— ์ˆ˜๋ฐฑ ๋ฒˆ, facebook ๋ฐ android browser.name์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์Šคํƒ ์ถ”์ ์ด ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ๋ฌด์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค๊ณผ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ์ •๋ณด๊ฐ€ ๋„์›€์ด ๋œ๋‹ค๋ฉด:

image

UA: Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-I8190L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/87.0.0.17.79;]

๋ธŒ๋ผ์šฐ์ €: Facebook 87.0.0

์—ฌ๊ธฐ์—์„œ ๋™์ผ, ์–ด๋–ค ์†”๋ฃจ์…˜?? :์—์Šค

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€์žˆ๋‹ค

image

ํ˜„์žฌ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค... ์ด ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ณ  ๊ณง ๋ณด์ดˆ ์ž„๊ณ„๊ฐ’์— ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜ž

Windows 10์˜ Chrome 45์—์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์‹ญ ๊ฐ€์ง€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

raven 3.15.0, Facebook ๋ฐ Android ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ƒฅ ๋ฌด์‹œํ•ด์•ผ ํ• ๊นŒ์š”?

๋ˆ„๊ตฌ๋“ ์ง€ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ? ์ œ ๊ฒฝ์šฐ์—๋Š” ์„ผํŠธ๋ฆฌ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

`[๊ฐ์ฒด ์ด๋ฒคํŠธ]

trimHeadFrames(./node_modules/raven-js/src/raven.js:562:1)
_logDebug(./node_modules/raven-js/src/raven.js:488:1)
G._promiseRejectionHandler(./node_modules/raven-js/src/raven.js:430:1)`

์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€PromiseRejection: true

์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ: Mozilla/5.0(Linux, U, Android 6.0.1, en-US, vivo 1610 Build/MMB29M) AppleWebKit/537.36(Gecko์™€ ๊ฐ™์€ KHTML) ๋ฒ„์ „/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.8.1112 /537.36

์žฅ์น˜ ์ œํ’ˆ๊ตฐ: ์ƒ์ฒด 1610
์žฅ์น˜ ๋ชจ๋ธ: 1610
์žฅ์น˜ ๋ธŒ๋žœ๋“œ: ์ƒ์ฒด

์•ˆ๋“œ๋กœ์ด๋“œ 6.0.1

UC ๋ธŒ๋ผ์šฐ์ € 12.5.8

๋‚ด raven-js ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „์€ 3.25.0์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ์Šคํฌ๋ฆฐ์ƒท์„ ์ฒจ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค(๋งŽ์€ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐœ์ƒ).
raven-screenshot

์ด๋Š” ์ด๋ฒคํŠธ ํžŒํŠธ ๋ฐ ์‚ฌ์šฉ์ž ์ง€์ • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ SDK์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@kamilogorek

์ด๋Š” ์ด๋ฒคํŠธ ํžŒํŠธ ๋ฐ ์‚ฌ์šฉ์ž ์ง€์ • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ SDK์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
์ตœ์†Œํ•œ ์–ด๋–ค ๋ฒ„์ „์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?
์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ "์ด๋ฒคํŠธ ํžŒํŠธ" ๋ฐ "์‚ฌ์šฉ์ž ์ง€์ • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ" ์„ค์ •์˜ ์ฝ”๋“œ ์กฐ๊ฐ์ด ์žˆ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

@hiroshi ๋Š” https://github.com/getsentry/sentry-javascript/issues/1401#issuecomment -418631326์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
RC Today๋กœ ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด sentry-javascript SDK์˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. raven-js/node๋กœ ๋‹ค์‹œ ํฌํŒ…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, Sentry์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

exception | Error: [object Event]

์Šคํƒ ์ถ”์ ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ ์œ ์šฉํ•œ ์ •๋ณด๋„ ์—†์Šต๋‹ˆ๋‹ค. LogRocket ์„ธ์…˜์—์„œ ์‚ฌ์šฉ์ž๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. Facebook ๋ฐ Google ํƒœ๊ทธ ๊ด€๋ฆฌ์ž์— ๋Œ€ํ•œ ์ผ๋ถ€ ์ฐจ๋‹จ๋œ ์š”์ฒญ์ด ํ‘œ์‹œ๋˜๋ฏ€๋กœ ์ฐจ๋‹จ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด ์„ค์น˜๋œ ๊ฒƒ์œผ๋กœ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค.
์•„์ฃผ ์˜ค๋ž˜๋œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹ˆ๋ผ Chrome 75๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์˜ ๋ฐ˜๋ณต๋˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ œ์•ˆ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”

์ฐธ๊ณ : @sentry/browser ๋ฒ„์ „ 5.3.0

@burtyish ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์ฒซ ๋ฒˆ์งธ ์ข‹์€ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. 5.7.0์—์„œ ์ด ๋™์ž‘๊ณผ ๊ด€๋ จํ•˜์—ฌ _๋งŽ์€_ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

@kamilogorek ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
์ด์ œ sentry.javascript.browser v5.12.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๋” ์œ ์ตํ•œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์Šคํƒ ์ถ”์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

@burtyish ๊ต‰์žฅํ•ด! :)

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰