Browse Source

add global logger interceptor/ add header, ip info in logger

sutcalag 4 years ago
parent
commit
4cb24e4a11

+ 7 - 9
server/src/app.module.ts

@@ -1,4 +1,4 @@
-import { Module, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
+import { Module } from '@nestjs/common';
 import { APP_INTERCEPTOR } from '@nestjs/core';
 import { ServeStaticModule } from '@nestjs/serve-static';
 import { AppController } from './app.controller';
@@ -13,7 +13,7 @@ import { join } from 'path';
 import { PartitionsModule } from './partitions/partitions.module';
 import { SchemaModule } from './schema/schema.module';
 import { EventsModule } from './events/events.module';
-import { LoggerMiddleware } from './middlewares/logger';
+import { LoggingInterceptor } from './interceptors/index';
 
 @Module({
   imports: [
@@ -41,13 +41,11 @@ import { LoggerMiddleware } from './middlewares/logger';
       provide: APP_INTERCEPTOR,
       useClass: TransformResInterceptor,
     },
+    {
+      provide: APP_INTERCEPTOR,
+      useClass: LoggingInterceptor,
+    },
     UsersService,
   ],
 })
-export class AppModule {
-  configure(consumer: MiddlewareConsumer) {
-    consumer
-      .apply(LoggerMiddleware)
-      .forRoutes({ path: '*', method: RequestMethod.ALL });
-  }
-}
+export class AppModule { }

+ 0 - 2
server/src/collections/collections.controller.ts

@@ -24,12 +24,10 @@ import {
   VectorSearch,
 } from './dto';
 import { cacheKeys } from '../cache/config';
-import { LoggingInterceptor } from '../interceptors/index';
 
 //Including 2 kind of cache contorl, check getCollections and getStatistics for detail
 @ApiTags('collections')
 @Controller('collections')
-@UseInterceptors(LoggingInterceptor)
 export class CollectionsController {
   constructor(private collectionsService: CollectionsService, @Inject(CACHE_MANAGER) private cacheManager: Cache) { }
 

+ 5 - 1
server/src/interceptors/index.ts

@@ -57,11 +57,15 @@ export class ErrorInterceptor implements NestInterceptor {
 @Injectable()
 export class LoggingInterceptor implements NestInterceptor {
   intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
+    const [req = {}, res = {}] = context.getArgs();
+    const { ip = '', method = '', originalUrl = '', headers = {} } = req;
+    const { statusCode = '' } = res;
+    const ua = headers['user-agent'] || '';
     const now = Date.now();
     return next
       .handle()
       .pipe(
-        tap(() => Logger.log(`request to ${context.getArgs()[0]['url']} takes ${Date.now() - now}ms`)),
+        tap(() => Logger.log(`${method} ${originalUrl} takes ${Date.now() - now}ms ip:${ip} ua:${ua} status:${statusCode}`)),
       );
   }
 }

+ 0 - 3
server/src/partitions/partitions.controller.ts

@@ -7,7 +7,6 @@ import {
   Query,
   UsePipes,
   ValidationPipe,
-  UseInterceptors,
 } from '@nestjs/common';
 import { ApiTags } from '@nestjs/swagger';
 import {
@@ -17,11 +16,9 @@ import {
   ManageType,
 } from './dto';
 import { PartitionsService } from './partitions.service';
-import { LoggingInterceptor } from '../interceptors/index';
 
 @ApiTags('partitions')
 @Controller('partitions')
-@UseInterceptors(LoggingInterceptor)
 export class PartitionsController {
   constructor(private partitionsService: PartitionsService) { }
 

+ 0 - 3
server/src/schema/schema.controller.ts

@@ -6,7 +6,6 @@ import {
   Query,
   UsePipes,
   ValidationPipe,
-  UseInterceptors,
 } from '@nestjs/common';
 import { ApiTags } from '@nestjs/swagger';
 import {
@@ -17,10 +16,8 @@ import {
   GetIndexState,
 } from './dto';
 import { SchemaService } from './schema.service';
-import { LoggingInterceptor } from '../interceptors/index';
 @ApiTags('schema')
 @Controller('schema')
-@UseInterceptors(LoggingInterceptor)
 export class SchemaController {
   constructor(private schemaService: SchemaService) { }