diff --git a/server/apps/immich/src/main.ts b/server/apps/immich/src/main.ts index 9b36ffa395..18d92c24ef 100644 --- a/server/apps/immich/src/main.ts +++ b/server/apps/immich/src/main.ts @@ -10,11 +10,14 @@ import { SERVER_VERSION } from './constants/server_version.constant'; import { RedisIoAdapter } from './middlewares/redis-io.adapter.middleware'; import { json } from 'body-parser'; import { patchOpenAPI } from './utils/patch-open-api.util'; +import { getLogLevels } from '@app/common'; const logger = new Logger('ImmichServer'); async function bootstrap() { - const app = await NestFactory.create(AppModule); + const app = await NestFactory.create(AppModule, { + logger: getLogLevels(), + }); app.set('trust proxy'); app.set('etag', 'strong'); diff --git a/server/apps/microservices/src/main.ts b/server/apps/microservices/src/main.ts index 08527b655b..c512e5c0e7 100644 --- a/server/apps/microservices/src/main.ts +++ b/server/apps/microservices/src/main.ts @@ -1,13 +1,16 @@ import { Logger } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { SERVER_VERSION } from 'apps/immich/src/constants/server_version.constant'; +import { getLogLevels } from '@app/common'; import { RedisIoAdapter } from '../../immich/src/middlewares/redis-io.adapter.middleware'; import { MicroservicesModule } from './microservices.module'; const logger = new Logger('ImmichMicroservice'); async function bootstrap() { - const app = await NestFactory.create(MicroservicesModule); + const app = await NestFactory.create(MicroservicesModule, { + logger: getLogLevels(), + }); const redisIoAdapter = new RedisIoAdapter(app); await redisIoAdapter.connectToRedis(); diff --git a/server/apps/microservices/src/processors/metadata-extraction.processor.ts b/server/apps/microservices/src/processors/metadata-extraction.processor.ts index e5428fb538..251024c334 100644 --- a/server/apps/microservices/src/processors/metadata-extraction.processor.ts +++ b/server/apps/microservices/src/processors/metadata-extraction.processor.ts @@ -1,4 +1,3 @@ -import { ImmichLogLevel } from '@app/common/constants/log-level.constant'; import { AssetEntity, ExifEntity } from '@app/infra'; import { IExifExtractionProcessor, @@ -76,8 +75,8 @@ export type GeoData = { @Processor(QueueNameEnum.METADATA_EXTRACTION) export class MetadataExtractionProcessor { + private logger = new Logger(MetadataExtractionProcessor.name); private isGeocodeInitialized = false; - private logLevel: ImmichLogLevel; constructor( @InjectRepository(AssetEntity) @@ -86,10 +85,10 @@ export class MetadataExtractionProcessor { @InjectRepository(ExifEntity) private exifRepository: Repository, - private configService: ConfigService, + configService: ConfigService, ) { if (!configService.get('DISABLE_REVERSE_GEOCODING')) { - Logger.log('Initialising Reverse Geocoding'); + this.logger.log('Initializing Reverse Geocoding'); geocoderInit({ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -108,8 +107,6 @@ export class MetadataExtractionProcessor { Logger.log('Reverse Geocoding Initialised'); }); } - - this.logLevel = this.configService.get('LOG_LEVEL') || ImmichLogLevel.SIMPLE; } private async reverseGeocodeExif( @@ -260,12 +257,8 @@ export class MetadataExtractionProcessor { } await this.exifRepository.save(newExif); - } catch (e) { - Logger.error(`Error extracting EXIF ${String(e)}`, 'extractExif'); - - if (this.logLevel === ImmichLogLevel.VERBOSE) { - console.trace('Error extracting EXIF', e); - } + } catch (error: any) { + this.logger.error(`Error extracting EXIF ${error}`, error?.stack); } } diff --git a/server/libs/common/src/config/app.config.ts b/server/libs/common/src/config/app.config.ts index 44f58975bf..5e79c4260b 100644 --- a/server/libs/common/src/config/app.config.ts +++ b/server/libs/common/src/config/app.config.ts @@ -27,6 +27,6 @@ export const immichAppConfig: ConfigModuleOptions = { JWT_SECRET: Joi.string().required().custom(jwtSecretValidator), DISABLE_REVERSE_GEOCODING: Joi.boolean().optional().valid(true, false).default(false), REVERSE_GEOCODING_PRECISION: Joi.number().optional().valid(0, 1, 2, 3).default(3), - LOG_LEVEL: Joi.string().optional().valid('simple', 'verbose').default('simple'), + LOG_LEVEL: Joi.string().optional().valid('simple', 'verbose', 'debug', 'log', 'warn', 'error').default('log'), }), }; diff --git a/server/libs/common/src/constants/log-level.constant.ts b/server/libs/common/src/constants/log-level.constant.ts deleted file mode 100644 index 219959e642..0000000000 --- a/server/libs/common/src/constants/log-level.constant.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum ImmichLogLevel { - SIMPLE = 'simple', - VERBOSE = 'verbose', -} diff --git a/server/libs/common/src/utils/index.ts b/server/libs/common/src/utils/index.ts index afc90e5855..44ea662e16 100644 --- a/server/libs/common/src/utils/index.ts +++ b/server/libs/common/src/utils/index.ts @@ -1,3 +1,15 @@ +import { LogLevel } from '@nestjs/common'; + export * from './time-utils'; export * from './asset-utils'; export * from './user-utils'; + +export function getLogLevels() { + const LOG_LEVELS: LogLevel[] = ['verbose', 'debug', 'log', 'warn', 'error']; + let logLevel = process.env.LOG_LEVEL || 'log'; + if (logLevel === 'simple') { + logLevel = 'log'; + } + const logLevelIndex = LOG_LEVELS.indexOf(logLevel as LogLevel); + return logLevelIndex === -1 ? [] : LOG_LEVELS.slice(logLevelIndex); +}