From fd4a5c2293cfe8dc67747d5f3370cfea65e0b4bf Mon Sep 17 00:00:00 2001 From: rubikscraft Date: Mon, 7 Mar 2022 16:36:40 +0100 Subject: [PATCH] add configured loggin and production check --- backend/src/app.module.ts | 2 ++ backend/src/config/host.config.service.ts | 15 +++++++++++++-- backend/src/config/typeorm.config.service.ts | 10 +++++----- backend/src/logger/logger.module.ts | 10 ++++++++++ backend/src/logger/logger.service.ts | 13 +++++++++++++ backend/src/main.ts | 7 ++++++- support/picsur.Dockerfile | 2 ++ 7 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 backend/src/logger/logger.module.ts create mode 100644 backend/src/logger/logger.service.ts diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 2e37517..b9a927f 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -4,6 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { PicsurConfigModule } from './config/config.module'; import { ServeStaticConfigService } from './config/servestatic.config.service'; import { TypeOrmConfigService } from './config/typeorm.config.service'; +import { PicsurLoggerModule } from './logger/logger.module'; import { DemoManagerModule } from './managers/demo/demomanager.module'; import { AuthModule } from './routes/api/auth/auth.module'; import { PrefModule } from './routes/api/pref/pref.module'; @@ -24,6 +25,7 @@ import { ImageModule } from './routes/image/imageroute.module'; ImageModule, DemoManagerModule, PrefModule, + PicsurLoggerModule, ], }) export class AppModule {} diff --git a/backend/src/config/host.config.service.ts b/backend/src/config/host.config.service.ts index fae75aa..3660c5b 100644 --- a/backend/src/config/host.config.service.ts +++ b/backend/src/config/host.config.service.ts @@ -21,17 +21,28 @@ export class HostConfigService { } public isDemo() { - const enabled = this.configService.get(`${EnvPrefix}_DEMO`, false); + const enabled = this.configService.get(`${EnvPrefix}DEMO`, false); this.logger.debug('Demo enabled: ' + enabled); return enabled; } public getDemoInterval() { const interval = this.configService.get( - `${EnvPrefix}_DEMO_INTERVAL`, + `${EnvPrefix}DEMO_INTERVAL`, 1000 * 60 * 5, ); this.logger.debug('Demo interval: ' + interval); return interval; } + + public isProduction() { + const enabled = this.configService.get( + `${EnvPrefix}PRODUCTION`, + false, + ); + if (enabled) { + this.logger.log('Running in production mode'); + } + return enabled; + } } diff --git a/backend/src/config/typeorm.config.service.ts b/backend/src/config/typeorm.config.service.ts index ae0bcb0..b0c74e6 100644 --- a/backend/src/config/typeorm.config.service.ts +++ b/backend/src/config/typeorm.config.service.ts @@ -12,18 +12,18 @@ export class TypeOrmConfigService implements TypeOrmOptionsFactory { public getTypeOrmServerOptions() { const varOptions = { - host: this.configService.get(`${EnvPrefix}_DB_HOST`, 'localhost'), - port: this.configService.get(`${EnvPrefix}_DB_PORT`, 5432), + host: this.configService.get(`${EnvPrefix}DB_HOST`, 'localhost'), + port: this.configService.get(`${EnvPrefix}DB_PORT`, 5432), username: this.configService.get( - `${EnvPrefix}_DB_USERNAME`, + `${EnvPrefix}DB_USERNAME`, DefaultName, ), password: this.configService.get( - `${EnvPrefix}_DB_PASSWORD`, + `${EnvPrefix}DB_PASSWORD`, DefaultName, ), database: this.configService.get( - `${EnvPrefix}_DB_DATABASE`, + `${EnvPrefix}DB_DATABASE`, DefaultName, ), }; diff --git a/backend/src/logger/logger.module.ts b/backend/src/logger/logger.module.ts new file mode 100644 index 0000000..253ae00 --- /dev/null +++ b/backend/src/logger/logger.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { PicsurConfigModule } from '../config/config.module'; +import { PicsurLoggerService } from './logger.service'; + +@Module({ + imports: [PicsurConfigModule], + providers: [PicsurLoggerService], + exports: [PicsurLoggerService], +}) +export class PicsurLoggerModule {} diff --git a/backend/src/logger/logger.service.ts b/backend/src/logger/logger.service.ts new file mode 100644 index 0000000..fa276d6 --- /dev/null +++ b/backend/src/logger/logger.service.ts @@ -0,0 +1,13 @@ +import { ConsoleLogger, Injectable, Scope } from '@nestjs/common'; +import { HostConfigService } from '../config/host.config.service'; + +@Injectable({ scope: Scope.DEFAULT }) +export class PicsurLoggerService extends ConsoleLogger { + constructor(private hostService: HostConfigService) { + super(); + + if (hostService.isProduction()) { + super.setLogLevels(['error', 'warn', 'log']); + } + } +} diff --git a/backend/src/main.ts b/backend/src/main.ts index 9e35c49..56ff3dc 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -9,7 +9,7 @@ import { AppModule } from './app.module'; import { HostConfigService } from './config/host.config.service'; import { MainExceptionFilter } from './layers/httpexception/httpexception.filter'; import { SuccessInterceptor } from './layers/success/success.interceptor'; - +import { PicsurLoggerService } from './logger/logger.service'; async function bootstrap() { const fastifyAdapter = new FastifyAdapter(); @@ -20,6 +20,9 @@ async function bootstrap() { const app = await NestFactory.create( AppModule, fastifyAdapter, + { + bufferLogs: true + } ); app.useGlobalFilters(new MainExceptionFilter()); app.useGlobalInterceptors(new SuccessInterceptor()); @@ -30,6 +33,8 @@ async function bootstrap() { }), ); + app.useLogger(app.get(PicsurLoggerService)); + const hostConfigService = app.get(HostConfigService); await app.listen(hostConfigService.getPort(), hostConfigService.getHost()); } diff --git a/support/picsur.Dockerfile b/support/picsur.Dockerfile index 7ccb79d..e4f5692 100644 --- a/support/picsur.Dockerfile +++ b/support/picsur.Dockerfile @@ -3,6 +3,8 @@ FROM node:16-alpine # Sorry for the humongous docker container this generates # Maybe I'll trim it down some day +ENV PICSUR_PRODUCTION=true + ADD . /picsur WORKDIR /picsur