@sentry/browser
@sentry/node
raven-js
raven-node
_(рдиреЛрдб рдХреЗ рд▓рд┐рдП рд░реЗрд╡реЗрди)_@sentry/browser": "4.4.2"
рдирдорд╕реНрддреЗ,
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ Angular6 + Ngrx6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореИрдВ рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╡реЗрдмрдПрдк рдПрдкреАрдЖрдИ рдХреЙрд▓ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рддреЛ рд╕рдВрддрд░реА рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рднреЗрдЬрдирд╛ред
рдорд╛рди рд▓реАрдЬрд┐рдП, рдореИрдВ /abc/3
рдирд╛рдордХ рдПрдХ рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
рдлрд┐рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ 404 Not Found
рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред
рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╕реЗрдВрдЯреНрд░реА рдХреЛ @sentry/browser
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реЗрд╡рд╛ рдмрдирд╛рдИ рд╣реИред
@Injectable({
providedIn: 'root'
})
export class SentryService {
constructor() { }
captureException(error: any) {
Sentry.captureException(error.originalError || error);
throw error;
}
}
рдФрд░ SentryErrorHandler
рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдХреЛрдгреАрдп рдХреЗ ErrorHandler
рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ
@Injectable()
export class SentryErrorHandler implements ErrorHandler {
constructor(private sentry: SentryService) {}
handleError(error: any): void {
this.sentry.captureException(error);
throw error;
}
}
рдпрд╣ рдХреЛрдб рд╕рд╛рдорд╛рдиреНрдп рдЬреЗрдПрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐
abcdefg(); // <- this function doesn't exist so it occurs an error and sent to Sentry.
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ рд╣реИред (рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдХрд╣рд╛ /abc/3
)
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ ErrorInterceptor
рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдХреЛрдгреАрдп рдХреЗ HttpInterceptor
рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
constructor(
private _injector: Injector,
private sentry: SentryService
) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req)
.pipe(
tap(event => {}, error => {
if (error) {
this.sentry.captureException(error);
}
})
);
}
}
рддрдм рдореИрдВ рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕рдВрддрд░реА рдбреИрд╢рдмреЛрд░реНрдб рдореЗрдВ рдХреЛрдИ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред
рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдХреНрд░реЛрдо рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдЪреЗрдХ рдХрд┐рдпрд╛ред рдФрд░ рдореБрдЭреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛:
"рдЧреИрд░-рддреНрд░реБрдЯрд┐ рдЕрдкрд╡рд╛рдж рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛: рддреНрд░реБрдЯрд┐, рд╢реАрд░реНрд╖рд▓реЗрдЦ, рд╕рдВрджреЗрд╢, рдирд╛рдо, рдареАрдХ рд╣реИ ..."
рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ рд╕рдВрддрд░реА/рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред
рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ Non-Error exception captured with keys: error, headers, message, name, okтАж
. рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рддреЛ рдпрд╣рд╛рдБ рдореЗрд░реЗ рдкреНрд░рд╢реНрди рд╣реИрдВред
рдзрдиреНрдпрд╡рд╛рдж!
@Taewa рдХреЛрдгреАрдп рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХреА рдЧрдИ рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБ SentryEvent
рдХреЗ рд╕рдорд╛рди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИред
рдХреБрдЫ рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ captureMessage(message: string)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рдпрд╣реА рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдореИрдВрдиреЗ рднреА рдЪреБрдирд╛ рд╣реИ: https://github.com/pascaliske/ngx-sentry/blob/master/projects/ngx-sentry/src/lib/sentry.interceptor.ts
рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рдВрддрд░реА рдШрдЯрдирд╛ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рдВрддрд░реА рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП captureEvent(event: SentryEvent)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЙрдореНрдореАрдж рд╣реИ рдХреА рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред рдореИрдВ
рдзрдиреНрдпрд╡рд╛рдж @pascaliske
рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ captureMessage(message: string)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдХрд╛ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред
рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЖрдЧрдВрддреБрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛ :)
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдпрд╣ рд╕реБрд▓рдЭрддрд╛ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@Taewa рдХреЛрдгреАрдп рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХреА рдЧрдИ рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБ
SentryEvent
рдХреЗ рд╕рдорд╛рди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИредрдХреБрдЫ рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓
captureMessage(message: string)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рдпрд╣реА рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдореИрдВрдиреЗ рднреА рдЪреБрдирд╛ рд╣реИ: https://github.com/pascaliske/ngx-sentry/blob/master/projects/ngx-sentry/src/lib/sentry.interceptor.tsрджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рдВрддрд░реА рдШрдЯрдирд╛ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рдВрддрд░реА рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП
captureEvent(event: SentryEvent)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВредрдЙрдореНрдореАрдж рд╣реИ рдХреА рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред рдореИрдВ