From 1a2959f6dc343f514ae2bbd39b5eb0a4eea947af Mon Sep 17 00:00:00 2001 From: David Mehren Date: Sun, 27 Sep 2020 21:41:02 +0200 Subject: [PATCH 1/2] Add logger module and custom logger implementation ConsoleLoggerService is based on the default Nest LoggerService, but adds the ability to give context about the function that is logging something. It also removes the `[Nest]` string and the PID at the beginning of each log line. NestConsoleLoggerService is a wrapper around ConsoleLoggerService and makes it possible to use our implementation as a default Nest LoggerService Signed-off-by: David Mehren --- src/logger/console-logger.service.ts | 119 ++++++++++++++++++++++ src/logger/logger.module.ts | 9 ++ src/logger/nest-console-logger.service.ts | 33 ++++++ 3 files changed, 161 insertions(+) create mode 100644 src/logger/console-logger.service.ts create mode 100644 src/logger/logger.module.ts create mode 100644 src/logger/nest-console-logger.service.ts diff --git a/src/logger/console-logger.service.ts b/src/logger/console-logger.service.ts new file mode 100644 index 000000000..bc594f3c3 --- /dev/null +++ b/src/logger/console-logger.service.ts @@ -0,0 +1,119 @@ +import { Injectable, Optional, Scope } from '@nestjs/common'; +import { isObject } from '@nestjs/common/utils/shared.utils'; +import * as clc from 'cli-color'; + +@Injectable({ scope: Scope.TRANSIENT }) +export class ConsoleLoggerService { + private classContext; + private lastTimestamp: number; + + constructor(@Optional() context?: string) { + this.classContext = context; + } + + setContext(context: string) { + this.classContext = context; + } + + error(message: any, trace = '', functionContext?: string) { + this.printMessage( + message, + clc.red, + this.makeContextString(functionContext), + false, + ); + this.printStackTrace(trace); + } + + log(message: any, functionContext?: string) { + this.printMessage( + message, + clc.green, + this.makeContextString(functionContext), + false, + ); + } + + warn(message: any, functionContext?: string) { + this.printMessage( + message, + clc.yellow, + this.makeContextString(functionContext), + false, + ); + } + + debug(message: any, functionContext?: string) { + this.printMessage( + message, + clc.magentaBright, + this.makeContextString(functionContext), + false, + ); + } + + verbose(message: any, functionContext?: string) { + this.printMessage( + message, + clc.cyanBright, + this.makeContextString(functionContext), + false, + ); + } + + private makeContextString(functionContext) { + let context = this.classContext; + if (functionContext) { + context += '.' + functionContext + '()'; + } + return context; + } + + private printMessage( + message: any, + color: (message: string) => string, + context = '', + isTimeDiffEnabled?: boolean, + ) { + const output = isObject(message) + ? `${color('Object:')}\n${JSON.stringify(message, null, 2)}\n` + : color(message); + + const localeStringOptions = { + year: 'numeric', + hour: 'numeric', + minute: 'numeric', + second: 'numeric', + day: '2-digit', + month: '2-digit', + }; + //TODO make timestamp optional + const timestamp = new Date(Date.now()).toLocaleString( + undefined, + localeStringOptions, + ); + + const contextMessage = context ? clc.blue(`[${context}] `) : ''; + const timestampDiff = this.updateAndGetTimestampDiff(isTimeDiffEnabled); + + process.stdout.write( + `${timestamp} ${contextMessage}${output}${timestampDiff}\n`, + ); + } + + private updateAndGetTimestampDiff(isTimeDiffEnabled?: boolean): string { + const includeTimestamp = this.lastTimestamp && isTimeDiffEnabled; + const result = includeTimestamp + ? clc.yellow(` +${Date.now() - this.lastTimestamp}ms`) + : ''; + this.lastTimestamp = Date.now(); + return result; + } + + private printStackTrace(trace: string) { + if (!trace) { + return; + } + process.stdout.write(`${trace}\n`); + } +} diff --git a/src/logger/logger.module.ts b/src/logger/logger.module.ts new file mode 100644 index 000000000..fee91d3c4 --- /dev/null +++ b/src/logger/logger.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { ConsoleLoggerService } from './console-logger.service'; +import { NestConsoleLoggerService } from './nest-console-logger.service'; + +@Module({ + providers: [ConsoleLoggerService, NestConsoleLoggerService], + exports: [ConsoleLoggerService, NestConsoleLoggerService], +}) +export class LoggerModule {} diff --git a/src/logger/nest-console-logger.service.ts b/src/logger/nest-console-logger.service.ts new file mode 100644 index 000000000..918710d0c --- /dev/null +++ b/src/logger/nest-console-logger.service.ts @@ -0,0 +1,33 @@ +import { Injectable, LoggerService } from '@nestjs/common'; +import { ConsoleLoggerService } from './console-logger.service'; + +Injectable(); + +export class NestConsoleLoggerService implements LoggerService { + private consoleLoggerService = new ConsoleLoggerService(); + + debug(message: any, context?: string): any { + this.consoleLoggerService.setContext(context); + this.consoleLoggerService.debug(message); + } + + error(message: any, trace?: string, context?: string): any { + this.consoleLoggerService.setContext(context); + this.consoleLoggerService.error(message); + } + + log(message: any, context?: string): any { + this.consoleLoggerService.setContext(context); + this.consoleLoggerService.log(message); + } + + verbose(message: any, context?: string): any { + this.consoleLoggerService.setContext(context); + this.consoleLoggerService.verbose(message); + } + + warn(message: any, context?: string): any { + this.consoleLoggerService.setContext(context); + this.consoleLoggerService.warn(message); + } +} From d7f407da2da3e8f68ec5e7a18e0ce0d9e8d77c6c Mon Sep 17 00:00:00 2001 From: David Mehren Date: Sun, 27 Sep 2020 21:48:42 +0200 Subject: [PATCH 2/2] Switch to using the new custom logger Signed-off-by: David Mehren --- src/api/public/me/me.controller.spec.ts | 3 ++- src/api/public/me/me.controller.ts | 9 +++++---- src/api/public/media/media.controller.spec.ts | 2 ++ src/api/public/media/media.controller.ts | 6 ++++-- src/api/public/notes/notes.controller.spec.ts | 3 ++- src/api/public/notes/notes.controller.ts | 9 +++++---- src/api/public/public-api.module.ts | 2 ++ src/app.module.ts | 14 ++++++++------ src/history/history.module.ts | 2 ++ src/history/history.service.spec.ts | 2 ++ src/history/history.service.ts | 7 +++++-- src/main.ts | 5 +++++ src/monitoring/monitoring.module.ts | 2 ++ src/notes/notes.module.ts | 2 ++ src/notes/notes.service.spec.ts | 3 ++- src/notes/notes.service.ts | 10 ++++++---- src/permissions/permissions.module.ts | 2 ++ src/revisions/revisions.module.ts | 2 ++ src/revisions/revisions.service.spec.ts | 3 ++- src/revisions/revisions.service.ts | 10 ++++++---- src/users/users.module.ts | 6 +++++- src/users/users.service.spec.ts | 2 ++ src/users/users.service.ts | 9 ++++++--- test/public-api/notes.e2e-spec.ts | 2 ++ 24 files changed, 83 insertions(+), 34 deletions(-) diff --git a/src/api/public/me/me.controller.spec.ts b/src/api/public/me/me.controller.spec.ts index 1aef2f688..7ea008b21 100644 --- a/src/api/public/me/me.controller.spec.ts +++ b/src/api/public/me/me.controller.spec.ts @@ -1,6 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { HistoryModule } from '../../../history/history.module'; +import { LoggerModule } from '../../../logger/logger.module'; import { AuthorColor } from '../../../notes/author-color.entity'; import { Note } from '../../../notes/note.entity'; import { NotesModule } from '../../../notes/notes.module'; @@ -18,7 +19,7 @@ describe('Me Controller', () => { beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [MeController], - imports: [UsersModule, HistoryModule, NotesModule], + imports: [UsersModule, HistoryModule, NotesModule, LoggerModule], }) .overrideProvider(getRepositoryToken(User)) .useValue({}) diff --git a/src/api/public/me/me.controller.ts b/src/api/public/me/me.controller.ts index d0862472c..645fcaa0b 100644 --- a/src/api/public/me/me.controller.ts +++ b/src/api/public/me/me.controller.ts @@ -4,7 +4,6 @@ import { Delete, Get, HttpCode, - Logger, NotFoundException, Param, Put, @@ -12,6 +11,7 @@ import { import { HistoryEntryUpdateDto } from '../../../history/history-entry-update.dto'; import { HistoryEntryDto } from '../../../history/history-entry.dto'; import { HistoryService } from '../../../history/history.service'; +import { ConsoleLoggerService } from '../../../logger/console-logger.service'; import { NoteMetadataDto } from '../../../notes/note-metadata.dto'; import { NotesService } from '../../../notes/notes.service'; import { UserInfoDto } from '../../../users/user-info.dto'; @@ -19,13 +19,14 @@ import { UsersService } from '../../../users/users.service'; @Controller('me') export class MeController { - private readonly logger = new Logger(MeController.name); - constructor( + private readonly logger: ConsoleLoggerService, private usersService: UsersService, private historyService: HistoryService, private notesService: NotesService, - ) {} + ) { + this.logger.setContext(MeController.name); + } @Get() getMe(): UserInfoDto { diff --git a/src/api/public/media/media.controller.spec.ts b/src/api/public/media/media.controller.spec.ts index 1f04a4483..fa364d9b5 100644 --- a/src/api/public/media/media.controller.spec.ts +++ b/src/api/public/media/media.controller.spec.ts @@ -1,4 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { LoggerModule } from '../../../logger/logger.module'; import { MediaController } from './media.controller'; describe('Media Controller', () => { @@ -7,6 +8,7 @@ describe('Media Controller', () => { beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [MediaController], + imports: [LoggerModule], }).compile(); controller = module.get(MediaController); diff --git a/src/api/public/media/media.controller.ts b/src/api/public/media/media.controller.ts index 97e1ed21c..57aa18121 100644 --- a/src/api/public/media/media.controller.ts +++ b/src/api/public/media/media.controller.ts @@ -1,15 +1,17 @@ import { Controller, - Logger, Post, UploadedFile, UseInterceptors, } from '@nestjs/common'; import { FileInterceptor } from '@nestjs/platform-express'; +import { ConsoleLoggerService } from '../../../logger/console-logger.service'; @Controller('media') export class MediaController { - private readonly logger = new Logger(MediaController.name); + constructor(private readonly logger: ConsoleLoggerService) { + this.logger.setContext(MediaController.name); + } @Post('upload') @UseInterceptors(FileInterceptor('file')) diff --git a/src/api/public/notes/notes.controller.spec.ts b/src/api/public/notes/notes.controller.spec.ts index 863461266..6cbf98960 100644 --- a/src/api/public/notes/notes.controller.spec.ts +++ b/src/api/public/notes/notes.controller.spec.ts @@ -1,5 +1,6 @@ import { Test, TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; +import { LoggerModule } from '../../../logger/logger.module'; import { AuthorColor } from '../../../notes/author-color.entity'; import { Note } from '../../../notes/note.entity'; import { NotesService } from '../../../notes/notes.service'; @@ -25,7 +26,7 @@ describe('Notes Controller', () => { useValue: {}, }, ], - imports: [RevisionsModule, UsersModule], + imports: [RevisionsModule, UsersModule, LoggerModule], }) .overrideProvider(getRepositoryToken(Note)) .useValue({}) diff --git a/src/api/public/notes/notes.controller.ts b/src/api/public/notes/notes.controller.ts index e0f15d551..59e21ac39 100644 --- a/src/api/public/notes/notes.controller.ts +++ b/src/api/public/notes/notes.controller.ts @@ -5,7 +5,6 @@ import { Delete, Get, Header, - Logger, Param, Post, Put, @@ -13,18 +12,20 @@ import { } from '@nestjs/common'; import { Request } from 'express'; import * as getRawBody from 'raw-body'; +import { ConsoleLoggerService } from '../../../logger/console-logger.service'; import { NotePermissionsUpdateDto } from '../../../notes/note-permissions.dto'; import { NotesService } from '../../../notes/notes.service'; import { RevisionsService } from '../../../revisions/revisions.service'; @Controller('notes') export class NotesController { - private readonly logger = new Logger(NotesController.name); - constructor( + private readonly logger: ConsoleLoggerService, private noteService: NotesService, private revisionsService: RevisionsService, - ) {} + ) { + this.logger.setContext(NotesController.name); + } /** * Extract the raw markdown from the request body and create a new note with it diff --git a/src/api/public/public-api.module.ts b/src/api/public/public-api.module.ts index c7239f497..26646d4cf 100644 --- a/src/api/public/public-api.module.ts +++ b/src/api/public/public-api.module.ts @@ -1,5 +1,6 @@ import { Module } from '@nestjs/common'; import { HistoryModule } from '../../history/history.module'; +import { LoggerModule } from '../../logger/logger.module'; import { MonitoringModule } from '../../monitoring/monitoring.module'; import { NotesModule } from '../../notes/notes.module'; import { RevisionsModule } from '../../revisions/revisions.module'; @@ -16,6 +17,7 @@ import { MonitoringController } from './monitoring/monitoring.controller'; NotesModule, RevisionsModule, MonitoringModule, + LoggerModule, ], controllers: [ MeController, diff --git a/src/app.module.ts b/src/app.module.ts index dfaa4a445..138c0c615 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,14 +1,15 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { PublicApiModule } from './api/public/public-api.module'; -import { NotesModule } from './notes/notes.module'; -import { UsersModule } from './users/users.module'; -import { RevisionsModule } from './revisions/revisions.module'; import { AuthorsModule } from './authors/authors.module'; -import { HistoryModule } from './history/history.module'; -import { MonitoringModule } from './monitoring/monitoring.module'; -import { PermissionsModule } from './permissions/permissions.module'; import { GroupsModule } from './groups/groups.module'; +import { HistoryModule } from './history/history.module'; +import { LoggerModule } from './logger/logger.module'; +import { MonitoringModule } from './monitoring/monitoring.module'; +import { NotesModule } from './notes/notes.module'; +import { PermissionsModule } from './permissions/permissions.module'; +import { RevisionsModule } from './revisions/revisions.module'; +import { UsersModule } from './users/users.module'; @Module({ imports: [ @@ -27,6 +28,7 @@ import { GroupsModule } from './groups/groups.module'; MonitoringModule, PermissionsModule, GroupsModule, + LoggerModule, ], controllers: [], providers: [], diff --git a/src/history/history.module.ts b/src/history/history.module.ts index ee910252e..1544eda45 100644 --- a/src/history/history.module.ts +++ b/src/history/history.module.ts @@ -1,8 +1,10 @@ import { Module } from '@nestjs/common'; +import { LoggerModule } from '../logger/logger.module'; import { HistoryService } from './history.service'; @Module({ providers: [HistoryService], exports: [HistoryService], + imports: [LoggerModule], }) export class HistoryModule {} diff --git a/src/history/history.service.spec.ts b/src/history/history.service.spec.ts index b79a1c6e4..a5368339d 100644 --- a/src/history/history.service.spec.ts +++ b/src/history/history.service.spec.ts @@ -1,4 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { LoggerModule } from '../logger/logger.module'; import { HistoryService } from './history.service'; describe('HistoryService', () => { @@ -7,6 +8,7 @@ describe('HistoryService', () => { beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [HistoryService], + imports: [LoggerModule], }).compile(); service = module.get(HistoryService); diff --git a/src/history/history.service.ts b/src/history/history.service.ts index 046b070d5..d8ab04adf 100644 --- a/src/history/history.service.ts +++ b/src/history/history.service.ts @@ -1,10 +1,13 @@ -import { Injectable, Logger } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; +import { ConsoleLoggerService } from '../logger/console-logger.service'; import { HistoryEntryUpdateDto } from './history-entry-update.dto'; import { HistoryEntryDto } from './history-entry.dto'; @Injectable() export class HistoryService { - private readonly logger = new Logger(HistoryService.name); + constructor(private readonly logger: ConsoleLoggerService) { + this.logger.setContext(HistoryService.name); + } getUserHistory(username: string): HistoryEntryDto[] { //TODO: Use the database diff --git a/src/main.ts b/src/main.ts index a7684c7ec..e98b56051 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,9 +2,13 @@ import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { AppModule } from './app.module'; +import { NestConsoleLoggerService } from './logger/nest-console-logger.service'; async function bootstrap() { const app = await NestFactory.create(AppModule); + const logger = await app.resolve(NestConsoleLoggerService); + logger.log('Switching logger', 'AppBootstrap'); + app.useLogger(logger); const swaggerOptions = new DocumentBuilder() .setTitle('HedgeDoc') @@ -21,6 +25,7 @@ async function bootstrap() { }), ); await app.listen(3000); + logger.log('Listening on port 3000', 'AppBootstrap'); } bootstrap(); diff --git a/src/monitoring/monitoring.module.ts b/src/monitoring/monitoring.module.ts index b94af54d4..aa21effbb 100644 --- a/src/monitoring/monitoring.module.ts +++ b/src/monitoring/monitoring.module.ts @@ -1,8 +1,10 @@ import { Module } from '@nestjs/common'; +import { LoggerModule } from '../logger/logger.module'; import { MonitoringService } from './monitoring.service'; @Module({ providers: [MonitoringService], exports: [MonitoringService], + imports: [LoggerModule], }) export class MonitoringModule {} diff --git a/src/notes/notes.module.ts b/src/notes/notes.module.ts index 0d2470ba3..f5a93a721 100644 --- a/src/notes/notes.module.ts +++ b/src/notes/notes.module.ts @@ -1,5 +1,6 @@ import { forwardRef, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { LoggerModule } from '../logger/logger.module'; import { RevisionsModule } from '../revisions/revisions.module'; import { UsersModule } from '../users/users.module'; import { AuthorColor } from './author-color.entity'; @@ -11,6 +12,7 @@ import { NotesService } from './notes.service'; TypeOrmModule.forFeature([Note, AuthorColor]), forwardRef(() => RevisionsModule), UsersModule, + LoggerModule, ], controllers: [], providers: [NotesService], diff --git a/src/notes/notes.service.spec.ts b/src/notes/notes.service.spec.ts index 53d44e3d2..4d18ca55f 100644 --- a/src/notes/notes.service.spec.ts +++ b/src/notes/notes.service.spec.ts @@ -1,5 +1,6 @@ import { Test, TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; +import { LoggerModule } from '../logger/logger.module'; import { Authorship } from '../revisions/authorship.entity'; import { Revision } from '../revisions/revision.entity'; import { RevisionsModule } from '../revisions/revisions.module'; @@ -23,7 +24,7 @@ describe('NotesService', () => { useValue: {}, }, ], - imports: [UsersModule, RevisionsModule], + imports: [UsersModule, RevisionsModule, LoggerModule], }) .overrideProvider(getRepositoryToken(User)) .useValue({}) diff --git a/src/notes/notes.service.ts b/src/notes/notes.service.ts index 9557cc069..2233fc87f 100644 --- a/src/notes/notes.service.ts +++ b/src/notes/notes.service.ts @@ -1,6 +1,7 @@ -import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common'; +import { forwardRef, Inject, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; +import { ConsoleLoggerService } from '../logger/console-logger.service'; import { Revision } from '../revisions/revision.entity'; import { RevisionsService } from '../revisions/revisions.service'; import { User } from '../users/user.entity'; @@ -16,14 +17,15 @@ import { NoteUtils } from './note.utils'; @Injectable() export class NotesService { - private readonly logger = new Logger(NotesService.name); - constructor( + private readonly logger: ConsoleLoggerService, @InjectRepository(Note) private noteRepository: Repository, @Inject(UsersService) private usersService: UsersService, @Inject(forwardRef(() => RevisionsService)) private revisionsService: RevisionsService, - ) {} + ) { + this.logger.setContext(NotesService.name); + } getUserNotes(username: string): NoteMetadataDto[] { this.logger.warn('Using hardcoded data!'); diff --git a/src/permissions/permissions.module.ts b/src/permissions/permissions.module.ts index 0d45ef6f5..9dd95ad22 100644 --- a/src/permissions/permissions.module.ts +++ b/src/permissions/permissions.module.ts @@ -1,11 +1,13 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { LoggerModule } from '../logger/logger.module'; import { NoteGroupPermission } from './note-group-permission.entity'; import { NoteUserPermission } from './note-user-permission.entity'; @Module({ imports: [ TypeOrmModule.forFeature([NoteUserPermission, NoteGroupPermission]), + LoggerModule, ], }) export class PermissionsModule {} diff --git a/src/revisions/revisions.module.ts b/src/revisions/revisions.module.ts index a959f703a..8c0b84aa9 100644 --- a/src/revisions/revisions.module.ts +++ b/src/revisions/revisions.module.ts @@ -1,5 +1,6 @@ import { forwardRef, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { LoggerModule } from '../logger/logger.module'; import { NotesModule } from '../notes/notes.module'; import { Authorship } from './authorship.entity'; import { Revision } from './revision.entity'; @@ -9,6 +10,7 @@ import { RevisionsService } from './revisions.service'; imports: [ TypeOrmModule.forFeature([Revision, Authorship]), forwardRef(() => NotesModule), + LoggerModule, ], providers: [RevisionsService], exports: [RevisionsService], diff --git a/src/revisions/revisions.service.spec.ts b/src/revisions/revisions.service.spec.ts index 658f8e5e9..04e929973 100644 --- a/src/revisions/revisions.service.spec.ts +++ b/src/revisions/revisions.service.spec.ts @@ -1,5 +1,6 @@ import { Test, TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; +import { LoggerModule } from '../logger/logger.module'; import { AuthorColor } from '../notes/author-color.entity'; import { Note } from '../notes/note.entity'; import { NotesModule } from '../notes/notes.module'; @@ -22,7 +23,7 @@ describe('RevisionsService', () => { useValue: {}, }, ], - imports: [NotesModule], + imports: [NotesModule, LoggerModule], }) .overrideProvider(getRepositoryToken(Authorship)) .useValue({}) diff --git a/src/revisions/revisions.service.ts b/src/revisions/revisions.service.ts index 8b4742b6f..af0b5ce7a 100644 --- a/src/revisions/revisions.service.ts +++ b/src/revisions/revisions.service.ts @@ -1,6 +1,7 @@ -import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common'; +import { forwardRef, Inject, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; +import { ConsoleLoggerService } from '../logger/console-logger.service'; import { NotesService } from '../notes/notes.service'; import { RevisionMetadataDto } from './revision-metadata.dto'; import { RevisionDto } from './revision.dto'; @@ -8,13 +9,14 @@ import { Revision } from './revision.entity'; @Injectable() export class RevisionsService { - private readonly logger = new Logger(RevisionsService.name); - constructor( + private readonly logger: ConsoleLoggerService, @InjectRepository(Revision) private revisionRepository: Repository, @Inject(forwardRef(() => NotesService)) private notesService: NotesService, - ) {} + ) { + this.logger.setContext(RevisionsService.name); + } async getNoteRevisionMetadatas( noteIdOrAlias: string, diff --git a/src/users/users.module.ts b/src/users/users.module.ts index 55e613ae6..1dbecd468 100644 --- a/src/users/users.module.ts +++ b/src/users/users.module.ts @@ -1,12 +1,16 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { LoggerModule } from '../logger/logger.module'; import { AuthToken } from './auth-token.entity'; import { Identity } from './identity.entity'; import { User } from './user.entity'; import { UsersService } from './users.service'; @Module({ - imports: [TypeOrmModule.forFeature([User, AuthToken, Identity])], + imports: [ + TypeOrmModule.forFeature([User, AuthToken, Identity]), + LoggerModule, + ], providers: [UsersService], exports: [UsersService], }) diff --git a/src/users/users.service.spec.ts b/src/users/users.service.spec.ts index 62815ba64..3adc1fd92 100644 --- a/src/users/users.service.spec.ts +++ b/src/users/users.service.spec.ts @@ -1,4 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { LoggerModule } from '../logger/logger.module'; import { UsersService } from './users.service'; describe('UsersService', () => { @@ -7,6 +8,7 @@ describe('UsersService', () => { beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [UsersService], + imports: [LoggerModule], }).compile(); service = module.get(UsersService); diff --git a/src/users/users.service.ts b/src/users/users.service.ts index 88e5fbbf9..cc4fa1880 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -1,10 +1,13 @@ -import { Injectable, Logger } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; +import { ConsoleLoggerService } from '../logger/console-logger.service'; import { UserInfoDto } from './user-info.dto'; import { User } from './user.entity'; @Injectable() export class UsersService { - private readonly logger = new Logger(UsersService.name); + constructor(private readonly logger: ConsoleLoggerService) { + this.logger.setContext(UsersService.name); + } getUserInfo(): UserInfoDto { //TODO: Use the database @@ -28,7 +31,7 @@ export class UsersService { toUserDto(user: User | null | undefined): UserInfoDto | null { if (!user) { - this.logger.warn(`toUserDto recieved ${user} argument!`); + this.logger.warn(`Recieved ${user} argument!`, 'toUserDto'); return null; } return { diff --git a/test/public-api/notes.e2e-spec.ts b/test/public-api/notes.e2e-spec.ts index a68349be1..a27e0ef7b 100644 --- a/test/public-api/notes.e2e-spec.ts +++ b/test/public-api/notes.e2e-spec.ts @@ -4,6 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import * as request from 'supertest'; import { PublicApiModule } from '../../src/api/public/public-api.module'; import { GroupsModule } from '../../src/groups/groups.module'; +import { LoggerModule } from '../../src/logger/logger.module'; import { NotesModule } from '../../src/notes/notes.module'; import { NotesService } from '../../src/notes/notes.service'; import { PermissionsModule } from '../../src/permissions/permissions.module'; @@ -25,6 +26,7 @@ describe('Notes', () => { autoLoadEntities: true, synchronize: true, }), + LoggerModule, ], }).compile();