λ‘컬μμ κ°λ°ν λ Sentryλ‘ μ€λ₯ 보λ΄κΈ°λ₯Ό λΉνμ±ννμ§λ§ μ¬μ ν μ΄λ¬ν μ€λ₯λ₯Ό μ½μμ νμνμ¬ μμ ν μ μκΈ°λ₯Ό μν©λλ€.
Sentryμ μμΈ/μ΄λ²€νΈλ₯Ό 보λ΄λ κ²μ λΉνμ±ννμ§λ§ μ¬μ ν μ½μμ κΈ°λ‘νλ λ°©λ²μ΄ μμ΅λκΉ?
μ΄λ¬ν μ΄μ λ‘ captureException
λ₯Ό λννμ΅λλ€.
function captureException(...args) {
if (typeof Sentry !== 'undefined') {
Sentry.captureException(...args);
}
else {
console.error(...args);
}
}
κ°μ₯ μ’μ λ°©λ²μ beforeSend
```js
Sentry.init({
dsn: "DSN",
beforeSend: μ΄λ²€νΈ => {
if (IS_DEBUG) {
console.error(μ΄λ²€νΈ);
nullμ λ°νν©λλ€. // μ΄κ²μ μ΄λ²€νΈλ₯Ό μμ νκ³ μ무 κ²λ μΌνΈλ¦¬λ‘ 보λ΄μ§ μμ κ²μ
λλ€.
}
λ°ν μ΄λ²€νΈ;
}
});
beforeSend
μ λν΄ λ§μμ λ€μ§ μλ μ μ μλ μ€λ₯ κ°μ²΄λ₯Ό μ»μ§ λͺ»νλ€λ κ²μ
λλ€. νμ§λ§ λ΅μ₯μ 보λ΄μ£Όμ
μ κ°μ¬ν©λλ€.
@gaastonsr λΉμ μ λ λ²μ§Έ μΈμλ‘ μν :) https://docs.sentry.io/learn/filtering/?platform=browser#before -send
Sentry.init({
dsn: "DSN",
beforeSend: (event, hint) => {
if (IS_DEBUG) {
console.error(hint.originalException || hint.syntheticException);
return null; // this drops the event and nothing will be sent to sentry
}
return event;
}
});
μ΄, μ΄κ²μ λͺ¨λ κ²μ λ°κΏλλ€! κ°μ¬ν©λλ€, @kamilogorek.
λ΄ μ½μμ΄ μ€λ₯λ₯Ό κΈ°λ‘νμ§ μλ μ΄μ λ₯Ό μ°Ύλ λ° 30λΆμ΄ κ±Έλ Έμ΅λλ€. μ΄ μμ μ λ μ¬μμΌ ν©λλ€.
μ¬κΈ°μ λ¬Έμ λ κΈ°λ³Έμ μΌλ‘ κΈ°λ‘νλ κ²½μ° κΈ°λ³Έμ μΌλ‘ μ΄λ κ²½λ‘λ‘ μΊ‘μ²νλ€λ κ²μ
λλ€. κ·Έλ¦¬κ³ μ°λ¦¬λ μ΄λ―Έ μΊ‘μ² μ€λ₯μ λν΄ μ΄ μμ
μ μνν©λλ€. λ°λΌμ μ€λ³΅ νλͺ©μ΄ μμ±λ©λλ€.
νΌλλ°±μ μν΄ κ·κ° μμ ν μ΄λ € μκ³ λκ΅°κ°κ° μ΄ λ¬Έμ λΆλΆμ κ°μ νλ λ°©λ²μ μκ³ μλ€λ©΄ ν¬ν¨νκ² λμ΄ κΈ°μ©λλ€. :)
μ¬κΈ°μ λ¬Έμ λ κΈ°λ³Έμ μΌλ‘ κΈ°λ‘νλ κ²½μ° κΈ°λ³Έμ μΌλ‘ μ΄λ κ²½λ‘λ‘ μΊ‘μ²νλ€λ κ²μ λλ€. κ·Έλ¦¬κ³ μ°λ¦¬λ μ΄λ―Έ μΊ‘μ² μ€λ₯μ λν΄ μ΄ μμ μ μνν©λλ€. λ°λΌμ μ€λ³΅ νλͺ©μ΄ μμ±λ©λλ€.
νΌλλ°±μ μν΄ κ·κ° μμ ν μ΄λ € μκ³ λκ΅°κ°κ° μ΄ λ¬Έμ λΆλΆμ κ°μ νλ λ°©λ²μ μκ³ μλ€λ©΄ ν¬ν¨νκ² λμ΄ κΈ°μ©λλ€. :)
Sentryκ° μ€λ₯λ₯Ό ν¬μ°©νκ³ μ½μμ νμνμ§ μλ κ²μ μ λ§ μμμΉ λͺ»ν νλμ
λλ€!
λλ λν μ½μμ΄ κΉ¨λνμ§λ§ λ΄ μ±μ΄ μλνμ§ μλ μ΄μ λ₯Ό λ°κ²¬νλ λ° ν μκ°μ 보λμ΅λλ€.
μ΄κ²μ λ°λμ λ³κ²½λμ΄μΌ ν©λλ€.
μλ² μΈ‘μ μ΄λ κ²½λ‘μμ μ€λ₯λ₯Ό νν°λ§ν μ μλ€κ³ μκ°ν©λλ€.
λλ setTimeout
μ½λ°±μμ μ½μμ κΈ°λ‘ν μ μμΌλ―λ‘ μ΄λ κ²½λ‘κ° μ΄λ―Έ μΊ‘μ²λ©λλ€. λ΄κ° νμ¬ νλ κ²μ²λΌ:
Sentry.init({
dsn: 'DSN',
beforeSend: (event, hint) => {
setTimeout(() => console.error(hint.originalException || hint.syntheticException), 0);
return event;
}
});
@vitalets 5.9.0
μμ λ³κ²½λμμ΅λλ€. μ΄μ μ½μμλ μ€λ₯κ° νμλ©λλ€.
@vitalets
5.9.0
μμ λ³κ²½λμμ΅λλ€. μ΄μ μ½μμλ μ€λ₯κ° νμλ©λλ€.
@kamilogorek
sentry/browser 5.9.1
(chrome 78, osx)μμλ μλνμ§ μμ΅λλ€.
μ½λλ λ€μκ³Ό κ°μ΅λλ€.
Sentry.init({ dsn: 'dsn' });
setTimeout(() => {throw new Error('abc')}, 3000);
μ½μμ΄ λΉμ΄ μμ΅λλ€. λ€νΈμν¬ νμ μ€λ₯κ° μΌνΈλ¦¬λ‘ μ μ‘λμμμ 보μ¬μ€λλ€.
μΌνΈλ¦¬ μμ΄ μ€λ₯κ° νμλ©λλ€.
// Sentry.init({ dsn: 'dsn' });
setTimeout(() => {throw new Error('abc')}, 3000);
μΊ‘μ² μ΄λ²€νΈκ° μλ captureExceptionμ λν΄ κΈ°λ‘ν©λλ€.
captureEvent λ° captureExceptionμ κΈ°λ‘νκΈ° μν΄ @kamilogorek μ μ루μ
μ μ½κ° μμ νμ΅λλ€.
Sentry.init({
dsn: "DSN",
beforeSend: (event, hint) => {
if (IS_DEBUG) {
console.error(hint.originalException || hint.syntheticException || event);
return null; // this drops the event and nothing will be sent to sentry
}
return event;
}
});
@kamilogorek λ @sentry/node
ν¨ν€μ§μ κΈ°λ³Έκ°μΈκ°μ? 5.9.0
λ²μ μ΄ μκ³ beforeSend
ν¨μκ° νΈμΆλλ κ²μ λ³Ό μ μμ§λ§ μ½μμ μ무κ²λ κΈ°λ‘λμ§ μμ΅λλ€.
λν 5.10.1μ μ¬μ©νλ μ½μμ μ€λ₯κ° νμλμ§ μμ΅λλ€. λλ²κ·Έκ° trueλ‘ μ€μ λμ΄ μμΌλ©΄ λ‘κΉ μΌλ‘ μΆ©λΆν©λλ€.
μ€νμ λκΉμ§ μμ½μΌλ©΄ μ΄λ κ² λλꡬλ...
https://html.spec.whatwg.org/multipage/webappapis.html#the -event-handler-processing-algorithm
νΉμ μ€λ₯ μ΄λ²€νΈ μ²λ¦¬κ° trueμΈ κ²½μ°
λ°ν κ°μ΄ trueμ΄λ©΄ μ΄λ²€νΈμ μ·¨μ νλκ·Έλ₯Ό μ€μ ν©λλ€.
κ·Έλ μ§ μμΌλ©΄
λ°ν κ°μ΄ falseμ΄λ©΄ μ΄λ²€νΈμ μ·¨μ νλκ·Έλ₯Ό μ€μ ν©λλ€.
κ·Έλ¦¬κ³ μ€ν¬λ‘€μ λ΄λ¦¬λ©΄...
μμ¬μ μ΄μ λ‘ νλ«νΌμλ λ κ°μ§ μμΈκ° μμ΅λλ€.
trueλ₯Ό λ°ννλ©΄ μ΄λ²€νΈκ° μ·¨μλλ μ μ κ°μ²΄μ onerror νΈλ€λ¬
κ·Έμ λ°λΌ μ½λλ₯Ό μ λ°μ΄νΈνκ² μ΅λλ€
μ€ν μμ½μΌλ©΄ μκΈ°λ μΌ
μ무λ μ¬μμ λκΉμ§ μ½μ§ μμ΅λλ€. :)
μμ ν΄μ£Όμ μ κ°μ¬ν©λλ€!
μ΄ μ€λ λλ₯Ό μ¬λ°λ₯΄κ² μ½κ³ μλ€λ©΄ νμ¬ μΌνΈλ¦¬ 릴리μ€λ μ½μμ μ€λ₯λ₯Ό νμνλ λμμ μΌνΈλ¦¬ λμ보λμλ μ€λ₯λ₯Ό μ μ‘ν΄μΌ ν©λλ€. μ΄ λμμ΄ λ°μνμ§ μμ΅λλ€.
λ΄ νμ΄μ§μ μΌνΈλ¦¬λ₯Ό λ‘λνλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
<script src="https://browser.sentry-cdn.com/5.20.1/bundle.min.js" integrity="sha384-O8HdAJg1h8RARFowXd2J/r5fIWuinSBtjhwQoPesfVILeXzGpJxvyY/77OaPPXUo" crossorigin="anonymous"></script>
<script src="https://browser.sentry-cdn.com/5.20.1/vue.min.js" crossorigin="anonymous"></script>
λ€μμ μ΄κΈ°ν νΈμΆμ λλ€.
Sentry.init({
dsn: 'https://_________.ingest.sentry.io/___________',
integrations: [new Sentry.Integrations.Vue({Vue, attachProps: true})],
});
λ€μ μ€λ₯ μμ± λΌμΈμ μΆκ°νμ΅λλ€.
window.undef.undef += 1;
νμ΄μ§λ₯Ό λ‘λνκ³ μ€λ₯ μ€μ νΈλ¦¬κ±°νλ©΄ μ½μμ μ무 κ²λ νμλμ§ μμ§λ§ μΌνΈλ¦¬ λμ보λμλ μ€λ₯κ° νμλ©λλ€. Sentry.init
νΈμΆμ μ£Όμ μ²λ¦¬νλ©΄ js μ½μμ TypeError
κ° νμλ©λλ€.
μ΄ μ€λ λλ₯Ό μ½μ κ²°κ³Ό js μ½μμμ μ€λ₯κ° νμλλ λμμ μΌνΈλ¦¬ λμ보λμ λ‘κΉ
ν κ²μΌλ‘ μμνμ΅λλ€. μ³μ§ μμ΅λκΉ? μ¬μ ν beforeSend
νν¬λ₯Ό μ¬μ©ν΄μΌ ν©λκΉ?
μ΄μ logErrors: true
λ₯Ό Integrations.Vue
νΈμΆμ μ λ¬ν΄μΌ νλ€λ κ²μ κΉ¨λ¬μμ΅λλ€.
new Sentry.Integrations.Vue({Vue, attachProps: true, logErrors: true}
μ£μ‘ν©λλ€. λ¬Έμλ₯Ό λ μμΈν μ½μμ΄μΌ νμ΅λλ€!
κ°μ₯ μ μ©ν λκΈ
@gaastonsr λΉμ μ λ λ²μ§Έ μΈμλ‘ μν :) https://docs.sentry.io/learn/filtering/?platform=browser#before -send