import { Injectable } from '@angular/core'; import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpResponse } from '@angular/common/http'; import {Observable} from 'rxjs'; import {LoggingService} from '@app/_services/logging.service'; import {finalize, tap} from 'rxjs/operators'; @Injectable() export class LoggingInterceptor implements HttpInterceptor { constructor( private loggingService: LoggingService ) {} intercept(request: HttpRequest, next: HttpHandler): Observable> { this.loggingService.sendInfoLevelMessage(request); const startTime = Date.now(); let status: string; return next.handle(request).pipe(tap(event => { status = ''; if (event instanceof HttpResponse) { status = 'succeeded'; } }, error => status = 'failed'), finalize(() => { const elapsedTime = Date.now() - startTime; const message = `${request.method} request for ${request.urlWithParams} ${status} in ${elapsedTime} ms`; this.loggingService.sendInfoLevelMessage(message); })); } }