From 4736b4e3e8e5c010c2b7f811f45c05d9aa8da047 Mon Sep 17 00:00:00 2001 From: Sergey Katsubo Date: Sun, 21 Dec 2025 06:00:34 +0300 Subject: [PATCH] chore(server): improve log messages (#24744) * Clarify the "asset not found" log during thumbnail generation: it's about database * Move not found sidecars to verbose level instead of "old=null, new=null" at debug * Log memory creation at default level * Add explicit log for missing exif date time Instead of: Date and time is undefined using exifTag undefined for asset ... * Log database migration start/end at default level Currently, these messages are logged as "debug". But they are not printed when debug or verbose level is set. This is due to the known limitation: SystemConfigService sets LogLevel later on, after migrations run. --- .../src/repositories/database.repository.ts | 4 ++-- server/src/services/media.service.ts | 2 +- server/src/services/memory.service.ts | 1 + server/src/services/metadata.service.ts | 20 +++++++++++++------ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/server/src/repositories/database.repository.ts b/server/src/repositories/database.repository.ts index 0fbaabf930..55ed2c1176 100644 --- a/server/src/repositories/database.repository.ts +++ b/server/src/repositories/database.repository.ts @@ -358,7 +358,7 @@ export class DatabaseRepository { } async runMigrations(): Promise { - this.logger.debug('Running migrations'); + this.logger.log('Running migrations'); const migrator = this.createMigrator(); @@ -379,7 +379,7 @@ export class DatabaseRepository { throw error; } - this.logger.debug('Finished running migrations'); + this.logger.log('Finished running migrations'); } async migrateFilePaths(sourceFolder: string, targetFolder: string): Promise { diff --git a/server/src/services/media.service.ts b/server/src/services/media.service.ts index 9027e89d66..917df1d8fd 100644 --- a/server/src/services/media.service.ts +++ b/server/src/services/media.service.ts @@ -158,7 +158,7 @@ export class MediaService extends BaseService { async handleGenerateThumbnails({ id }: JobOf): Promise { const asset = await this.assetJobRepository.getForGenerateThumbnailJob(id); if (!asset) { - this.logger.warn(`Thumbnail generation failed for asset ${id}: not found`); + this.logger.warn(`Thumbnail generation failed for asset ${id}: not found in database or missing metadata`); return JobStatus.Failed; } diff --git a/server/src/services/memory.service.ts b/server/src/services/memory.service.ts index 8e91c232f7..db682b6393 100644 --- a/server/src/services/memory.service.ts +++ b/server/src/services/memory.service.ts @@ -28,6 +28,7 @@ export class MemoryService extends BaseService { continue; } + this.logger.log(`Creating memories for ${target.toISO()}`); try { await Promise.all(users.map((owner) => this.createOnThisDayMemories(owner.id, target))); } catch (error) { diff --git a/server/src/services/metadata.service.ts b/server/src/services/metadata.service.ts index 8da7c88ecc..3e5b220c04 100644 --- a/server/src/services/metadata.service.ts +++ b/server/src/services/metadata.service.ts @@ -366,9 +366,13 @@ export class MetadataService extends BaseService { const isChanged = sidecarPath !== sidecarFile?.path; - this.logger.debug( - `Sidecar check found old=${sidecarFile?.path}, new=${sidecarPath} will ${isChanged ? 'update' : 'do nothing for'} asset ${asset.id}: ${asset.originalPath}`, - ); + if (sidecarFile?.path || sidecarPath) { + this.logger.debug( + `Sidecar check found old=${sidecarFile?.path}, new=${sidecarPath} will ${isChanged ? 'update' : 'do nothing for'} asset ${asset.id}: ${asset.originalPath}`, + ); + } else { + this.logger.verbose(`No sidecars found for asset ${asset.id}: ${asset.originalPath}`); + } if (!isChanged) { return JobStatus.Skipped; @@ -858,9 +862,13 @@ export class MetadataService extends BaseService { const result = firstDateTime(exifTags); const tag = result?.tag; const dateTime = result?.dateTime; - this.logger.verbose( - `Date and time is ${dateTime} using exifTag ${tag} for asset ${asset.id}: ${asset.originalPath}`, - ); + if (dateTime) { + this.logger.verbose( + `Date and time is ${dateTime} using exifTag ${tag} for asset ${asset.id}: ${asset.originalPath}`, + ); + } else { + this.logger.verbose(`No exif date time information found for asset ${asset.id}: ${asset.originalPath}`); + } // timezone let timeZone = exifTags.tz ?? null;