import { CallHandler, ExecutionContext, Injectable, Logger, NestInterceptor, } from '@nestjs/common' import { Observable, tap } from 'rxjs' @Injectable() export class LoggingInterceptor implements NestInterceptor { private logger = new Logger(LoggingInterceptor.name, { timestamp: false }) intercept( context: ExecutionContext, next: CallHandler, ): Observable { const call$ = next.handle() const request = context.switchToHttp().getRequest() const content = `${request.method} -> ${request.url}` const isSse = request.headers.accept === 'text/event-stream' this.logger.debug(`+++ 请求:${content}`) const now = Date.now() return call$.pipe( tap(() => { if (isSse) return this.logger.debug(`--- 响应:${content}${` +${Date.now() - now}ms`}`) }, ), ) } }