nestjs日志系统,自动输出请求接口记录
对请求接口数据进行日志文件输出,需要用到请求拦截器interceptor
自己生成拦截器文件,在tap函数里主动触发Logger进行打印输出,参考这里
// 这里定义接口请求日志拦截器
/*
https://docs.nestjs.com/interceptors#interceptors
*/
import { Injectable, NestInterceptor, ExecutionContext, CallHandler, Logger } from '@nestjs/common';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
@Injectable()
export class RequestInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable
const start = Date.now(); // 请求开始时间
const host = context.switchToHttp();
const request = host.getRequest
const reqHeaders: any= request.headers //得到请求头信息
// const origin= reqHeaders.host
// const reqHeaders = request.rawHeaders
const urlInfo = ${request.method} ${request.url}
;
return next
.handle()
.pipe(
tap(() =>
Logger.log(请求接口: ${urlInfo}, 响应时间: ${Date.now() - start} ms 请求来源: ${reqHeaders.host}
),
),
);
}
}
在main.ts里挂载
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER)) // 全局替换日志系统
app.useGlobalInterceptors(new RequestInterceptor()) // 对全局的接口 请求 进行日志记录
await app.listen(3000);
}