From 565e95ae68277b809c080a62ea8881353be7b5e3 Mon Sep 17 00:00:00 2001 From: Daniel Ramos Date: Mon, 22 Dec 2025 12:40:14 +0000 Subject: [PATCH] feat(server): add LogFormat enum and configuration --- server/src/dtos/env.dto.ts | 6 +++++- server/src/enum.ts | 5 +++++ server/src/repositories/config.repository.ts | 3 +++ server/test/repositories/config.repository.mock.ts | 3 ++- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/server/src/dtos/env.dto.ts b/server/src/dtos/env.dto.ts index 2a9dd8b662..57faaaa28a 100644 --- a/server/src/dtos/env.dto.ts +++ b/server/src/dtos/env.dto.ts @@ -1,6 +1,6 @@ import { Transform, Type } from 'class-transformer'; import { IsEnum, IsInt, IsString, Matches } from 'class-validator'; -import { DatabaseSslMode, ImmichEnvironment, LogLevel } from 'src/enum'; +import { DatabaseSslMode, ImmichEnvironment, LogFormat, LogLevel } from 'src/enum'; import { IsIPRange, Optional, ValidateBoolean } from 'src/validation'; export class EnvDto { @@ -48,6 +48,10 @@ export class EnvDto { @Optional() IMMICH_LOG_LEVEL?: LogLevel; + @IsEnum(LogFormat) + @Optional() + IMMICH_LOG_FORMAT?: LogFormat; + @Optional() @Matches(/^\//, { message: 'IMMICH_MEDIA_LOCATION must be an absolute path' }) IMMICH_MEDIA_LOCATION?: string; diff --git a/server/src/enum.ts b/server/src/enum.ts index 9d0a2c0426..b150cdbfb3 100644 --- a/server/src/enum.ts +++ b/server/src/enum.ts @@ -454,6 +454,11 @@ export enum LogLevel { Fatal = 'fatal', } +export enum LogFormat { + Console = 'console', + Json = 'json', +} + export enum ApiCustomExtension { Permission = 'x-immich-permission', AdminOnly = 'x-immich-admin-only', diff --git a/server/src/repositories/config.repository.ts b/server/src/repositories/config.repository.ts index 60ec021b3b..854a2dd47f 100644 --- a/server/src/repositories/config.repository.ts +++ b/server/src/repositories/config.repository.ts @@ -17,6 +17,7 @@ import { ImmichHeader, ImmichTelemetry, ImmichWorker, + LogFormat, LogLevel, QueueName, } from 'src/enum'; @@ -29,6 +30,7 @@ export interface EnvData { environment: ImmichEnvironment; configFile?: string; logLevel?: LogLevel; + logFormat: LogFormat; buildMetadata: { build?: string; @@ -227,6 +229,7 @@ const getEnv = (): EnvData => { environment, configFile: dto.IMMICH_CONFIG_FILE, logLevel: dto.IMMICH_LOG_LEVEL, + logFormat: dto.IMMICH_LOG_FORMAT || LogFormat.Console, buildMetadata: { build: dto.IMMICH_BUILD, diff --git a/server/test/repositories/config.repository.mock.ts b/server/test/repositories/config.repository.mock.ts index 656027fab5..0cc52483b0 100644 --- a/server/test/repositories/config.repository.mock.ts +++ b/server/test/repositories/config.repository.mock.ts @@ -1,4 +1,4 @@ -import { DatabaseExtension, ImmichEnvironment, ImmichWorker } from 'src/enum'; +import { DatabaseExtension, ImmichEnvironment, ImmichWorker, LogFormat } from 'src/enum'; import { ConfigRepository, EnvData } from 'src/repositories/config.repository'; import { RepositoryInterface } from 'src/types'; import { Mocked, vitest } from 'vitest'; @@ -6,6 +6,7 @@ import { Mocked, vitest } from 'vitest'; const envData: EnvData = { port: 2283, environment: ImmichEnvironment.Production, + logFormat: LogFormat.Console, buildMetadata: {}, bull: {