рдХреНрдпрд╛ рд░реЗрд╡реЗрди рдХреЛ рд╕рднреА рдлреЗрдВрдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдпрд╣ рдХреБрдЫ throw
рдХреЙрд▓ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдирд╣реАрдВред рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЗ рдиреАрдЪреЗ рдиреЗрд╕реНрдЯреЗрдб рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓реЙрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╣рд╛рд╣рд╛, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрдпрд╛рдирдХ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдлреЗрдВрдХ рд░рд╣реЗ рд╣реИрдВ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлреЗрдВрдХрдиреЗ рд╕реЗ рд╣рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреЛрдИ рднреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ Error
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдХ рд╕реНрдЯреИрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдкреНрд░рдпрд╛рд╕) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА, рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред
рдореИрдВ рдЗрд╕ рддрд░рд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реВрдБ:
throw new Error("Error");
рдХрднреА-рдХрднреА рдпрд╣ рд╕рдВрддрд░реА рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрднреА-рдХрднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рдЙрд╕ рдкреГрд╖реНрда рдкрд░ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдХрд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрд╛ рдЖрдк рдЗрд╕реЗ рдХрд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ? рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рд▓рдЧрднрдЧ 10 рдХрд╛рд░рдХ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рдорд╛рд░реЗ рд╣рд╛рде рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВред :) рддреЛ рдЕрдЧрд░ рдореИрдВ рдкреВрд░рд╛ рд╕рдВрджрд░реНрдн рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред
рдРрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛.рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЦреНрдп рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
Raven.config('http://[email protected]');
Raven.context(function() {
define(['cs!csmain']);
});
рдореИрдВрдиреЗ context
рд░реИрдкрд░ рдХреЗ рдмрд┐рдирд╛ рднреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдпрд╣ рдЕрднреА рднреА throw
рдХреЙрд▓ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдореЗрдВ рдКрдкрд░ рдХрд┐рдП рдЧрдП рдереЗ рдЬрдмрдХрд┐ рдиреАрдЪреЗ рд╡рд╛рд▓реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдПред
рдХреНрдпрд╛ рдЖрдк Raven.install()
рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ
рдФрд░ requ.js рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓ рд▓рдкреЗрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рдХрд░реЗрдВрдЧреЗ:
define(['module'], Raven.wrap(function(module) {
// insert cool stuff here
}));
рдореИрдВ рдЗрд╕реЗ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВ config() . рдХреЗ рдмрд╛рдж config()
install()
рдкрд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдореИрдВрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реЛрдВ рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ?
рдпрд╣ рд╕рдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЙрд▓рд╕реНрдЯреИрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЪреАрдЬреЗрдВ async рднреВрдорд┐ рдореЗрдВ рдЬрд╛рдиреЗ рд▓рдЧрддреА рд╣реИрдВ, рддреЛ рдпрд╣ рдЦреБрд░рджрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛:
Raven.context(function() {
setTimeout(function() {
throw new Error('crap');
}, 1);
});
рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рдореБрдЦреНрдп рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд╣рд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Node.js рдЗрд╕реЗ "рдбреЛрдореЗрди" рдирд╛рдордХ рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рд╡реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рднреВрдорд┐ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдкрдХрдбрд╝ рдореЗрдВ рдирд╣реАрдВ рдЖрддреА рд╣реИ рдФрд░ рд╢реАрд░реНрд╖ рдкрд░ рд╕рднреА рддрд░рд╣ рд╕реЗ рдмреБрд▓рдмреБрд▓реЗ рдмрдирддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╕рдордп рдпрд╣ 100% рдмреЗрдХрд╛рд░ рд╣реИред
рдУрд╣ рд╕рдордЭрд╛ред рд╢рд╛рдпрдж window.onerror
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?
рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рдЕрдкрд╡рд╛рдж рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рднрд░реЛрд╕реЗрдордВрдж рддрд░реАрдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ Raven.captureException
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ FYI рдХрд░реЗрдВред
рддреЛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдпрд╛рд╕ ... рдмреНрд▓реЙрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд░рд╛рдЬреНрдп рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ:
try {
throw new Error('something');
} catch(e) {
Raven.captureException(e);
}
рд╕рд╣реАред рдмреЗрд╢рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕реЗ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдЧреЗрдо рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ ...
@pheuter рдирд╣реАрдВред :) рдФрд░ рдпрд╣ рдордЬреЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рддреНрд░реБрдЯрд┐ window.onerror рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдЕрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ Error
рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмреЗрдХрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЪрдкрдЯрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдХреНрд░реЙрд╕ рдбреЛрдореЗрди рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЛрдВ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ, рдПрдХ рдмрд╛рд░ рддреНрд░реБрдЯрд┐ window.onerror
рд╣рд┐рдЯ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдЗрд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ: "Script error."
ред
рдмреЗрдХрд╛рд░ рд╣реИред рдУрд╣ рдареАрдХ рд╣реИ, рдореИрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ!
рдирд╣реАрдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрдпрд╛рдирдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред :) рдореИрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╢реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╣рдореЗрдВ рдмреЗрд╣рддрд░ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рдмрдВрджрд░ рдкреИрдЪ Function.prototype.call
рддрдХ рднреА рдкрд╛рд░ рдХрд░ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╢рд╛рдпрдж рд╡рд╛рдХрдИ рдмреБрд░реА рдЦрдмрд░ рд╣реИред
рдкреВрд░реА рддрд░рд╣ рд╕реЗ! рдпрджрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рдпрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред рдореИрдВ рд╣рдореЗрд╢рд╛ рдЙрд╕ рд╕рд╛рдорд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд░рд╣рддрд╛ рд╣реВрдВред
рдХрд░реЗрдВрдЧреЗ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдЙрдкрдпреЛрдЧ рдбреЙрдХреНрд╕ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИрдВред
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Error
рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
@mattrobenolt , рдпрд╣ рд╡рд╣ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо CoffeeScript рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЗ рд░рд╣реЗ рд╣реИрдВред
window.Error = class extends Error
constructor: ->
error = super
Raven.captureException error
return error
рдлрд┐рд░ рдмрд╕ throw new Error "Test Error"
. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдЕрджреНрдпрддрди рдЯрд┐рдкреНрдкрдгреАред
рд╣рдореНрдоред рдореИрдВ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓реВрдБрдЧрд╛ред рдЖрдЦрд┐рд░реА рдмрд╛рд░ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣ рдореБрдЭреЗ рдЦрд┐рдбрд╝рдХреА рдкрд░ рдкреИрдЪ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрдЧрд╛ред рддреНрд░реБрдЯрд┐ред рдореИрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрднрд╡ рд╣реИред
рд╕рд░ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рд╡рд╣ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдмрд╕ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ред
рд╣реЗрдпрд░ рдпреВ рдЧреЛ:
var __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
window.Error = (function(_super) {
__extends(_Class, _super);
function _Class() {
var error;
error = _Class.__super__.constructor.apply(this, arguments);
Raven.captureException(error);
return error;
}
return _Class;
})(Error);
рдЕрдм рдЬрдм рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдмрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рд╕реЗ рд░реЗрд╡реЗрди рд╣рд░ рдПрд░рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реЛ рдпрд╛ рдирд╣реАрдВред :)
рдПрдлрд╡рд╛рдИрдЖрдИ, рддреНрд░реБрдЯрд┐ рдХреЛ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓рд╛ред рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд░реЗрд╡реЗрди-рдЬреЗрдПрд╕ рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХреЗред
@dmcquay рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрд░рд░рд╕реЗрдкреНрд╢рди рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ? рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╕рднреА рдЬреЗрдПрд╕ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ 50% raven.js рд╣реИрдВ;)
рдкреВрдк:
@BYK , рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рдореБрдЭреЗ рдПрд░рд░рд╕реЗрдкреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдВрджрд░реВрдиреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдкрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдмрд╕ рдЦреБрдж рдХреЛ window.onerror
рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдПред
рдПрд░рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рд╛рдИрдЬреИрдХ рдХрд░рдирд╛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрди рд╕рднреА рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @mattrobenolt рдХреА рдмрд╛рдд, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЬрд┐рдиреНрд╣реЗрдВ рдлреЗрдВрдХрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд╡реИрдз рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрдВрджрд╛ рд╕рдорд╛рдзрд╛рди рд╡реИрд╢реНрд╡рд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЕрдкрд╣реГрдд рдХрд░рдХреЗ рдирд┐рд░реНрдорд┐рдд Error
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдФрд░ onerror
рдХреЛ рднреА рд╕реБрдирдирд╛ рдФрд░ message
, fileName
рдФрд░ lineNo
рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рднреА рддреНрд░реБрдЯрд┐-рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреБрдЫ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрд╡рд╛рдПрдВ (рдЬреИрд╕реЗ https://qbaka.com/) рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╡рд┐рд╢реЗрд╖ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рдмрд╣реБрдд рдЦрд░рд╛рдм рдПрд░рд░рд╕реЗрдкреНрд╢рди рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рд░ рддрд░рд╣ рд╕реЗ рд╢реНрд░реЗрд╖реНрда рд▓рдЧрддрд╛ рд╣реИред
рд╣рдо рдЕрдкрдиреЗ Django рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдВрддрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрддрд░реА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реБрдП рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИред рдХреНрдпрд╛ рд░реЗрд╡реЗрди-рдЬреЗрдПрд╕ рдХреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕рднреА рдЬреЗрдПрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрдХрдбрд╝рдиреЗ рдФрд░ рд╕рдВрддрд░реА рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
@adityar7 рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред Raven.js рдордВрдХреА рдкреИрдЪ рдФрд░ рдЕрдЧрд░ рд╣реЛ рд╕рдХреЗ рддреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рдФрд░ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
@mattrobenolt рдХреБрдЫ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдХреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣реЗрдпрд░ рдпреВ рдЧреЛ: