diff --git a/backend/src/controllers/learningObjects.ts b/backend/src/controllers/learningObjects.ts index 4295326a..90cd3f13 100644 --- a/backend/src/controllers/learningObjects.ts +++ b/backend/src/controllers/learningObjects.ts @@ -6,6 +6,7 @@ import { } from '../services/learningObjects.js'; import { FALLBACK_LANG } from '../config.js'; import { FilteredLearningObject } from '../interfaces/learningPath'; +import { getLogger } from '../logging/initalize'; export async function getAllLearningObjects( req: Request, @@ -33,7 +34,7 @@ export async function getAllLearningObjects( res.json(learningObjects); } catch (error) { - console.error('Error fetching learning objects:', error); + getLogger().error('Error fetching learning objects:', error); res.status(500).json({ error: 'Internal server error' }); } } @@ -54,7 +55,7 @@ export async function getLearningObject( const learningObject = await getLearningObjectById(hruid, language); res.json(learningObject); } catch (error) { - console.error('Error fetching learning object:', error); + getLogger().error('Error fetching learning object:', error); res.status(500).json({ error: 'Internal server error' }); } } diff --git a/backend/src/controllers/learningPaths.ts b/backend/src/controllers/learningPaths.ts index 903451be..86878bfd 100644 --- a/backend/src/controllers/learningPaths.ts +++ b/backend/src/controllers/learningPaths.ts @@ -5,6 +5,7 @@ import { fetchLearningPaths, searchLearningPaths, } from '../services/learningPaths.js'; +import { getLogger } from '../logging/initalize.js'; /** * Fetch learning paths based on query parameters. */ @@ -56,7 +57,7 @@ export async function getLearningPaths( ); res.json(learningPaths.data); } catch (error) { - console.error('❌ Unexpected error fetching learning paths:', error); + getLogger().error('❌ Unexpected error fetching learning paths:', error); res.status(500).json({ error: 'Internal server error' }); } } diff --git a/backend/src/controllers/themes.ts b/backend/src/controllers/themes.ts index 817464ab..c10f1b98 100644 --- a/backend/src/controllers/themes.ts +++ b/backend/src/controllers/themes.ts @@ -1,9 +1,13 @@ import fs from 'fs'; import path from 'path'; import yaml from 'js-yaml'; +import { Logger } from 'winston'; import { Request, Response } from 'express'; import { themes } from '../data/themes.js'; import { FALLBACK_LANG } from '../config.js'; +import { getLogger } from '../logging/initalize.js'; + +const logger: Logger = getLogger(); interface Translations { curricula_page: { @@ -17,10 +21,10 @@ function loadTranslations(language: string): Translations { const yamlFile = fs.readFileSync(filePath, 'utf8'); return yaml.load(yamlFile) as Translations; } catch (error) { - console.error( + logger.error( `Cannot load translation for: ${language}, fallen back to Dutch` ); - console.error(error); + logger.error(error); const fallbackPath = path.join(process.cwd(), '_i18n', 'nl.yml'); return yaml.load(fs.readFileSync(fallbackPath, 'utf8')) as Translations; } diff --git a/backend/src/services/learningObjects.ts b/backend/src/services/learningObjects.ts index d1d34ad2..90370fe6 100644 --- a/backend/src/services/learningObjects.ts +++ b/backend/src/services/learningObjects.ts @@ -7,6 +7,10 @@ import { LearningPathResponse, } from '../interfaces/learningPath.js'; import { fetchLearningPaths } from './learningPaths.js'; +import { getLogger } from '../logging/initalize.js'; +import { Logger } from 'winston'; + +const logger: Logger = getLogger(); function filterData( data: LearningObjectMetadata, @@ -49,7 +53,7 @@ export async function getLearningObjectById( ); if (!metadata) { - console.error(`⚠️ WARNING: Learning object "${hruid}" not found.`); + logger.error(`⚠️ WARNING: Learning object "${hruid}" not found.`); return null; } @@ -77,7 +81,7 @@ async function fetchLearningObjects( !learningPathResponse.success || !learningPathResponse.data?.length ) { - console.error( + logger.error( `⚠️ WARNING: Learning path "${hruid}" exists but contains no learning objects.` ); return []; @@ -104,7 +108,7 @@ async function fetchLearningObjects( }); }); } catch (error) { - console.error('❌ Error fetching learning objects:', error); + logger.error('❌ Error fetching learning objects:', error); return []; } } diff --git a/backend/src/services/learningPaths.ts b/backend/src/services/learningPaths.ts index 2a9f15a3..7c445806 100644 --- a/backend/src/services/learningPaths.ts +++ b/backend/src/services/learningPaths.ts @@ -4,6 +4,10 @@ import { LearningPath, LearningPathResponse, } from '../interfaces/learningPath.js'; +import { getLogger } from '../logging/initalize.js'; +import { Logger } from 'winston'; + +const logger: Logger = getLogger(); export async function fetchLearningPaths( hruids: string[], @@ -29,7 +33,7 @@ export async function fetchLearningPaths( ); if (!learningPaths || learningPaths.length === 0) { - console.error(`⚠️ WARNING: No learning paths found for ${source}.`); + logger.error(`⚠️ WARNING: No learning paths found for ${source}.`); return { success: false, source, diff --git a/backend/src/util/apiHelper.ts b/backend/src/util/apiHelper.ts index 76d166c8..4a1cae7f 100644 --- a/backend/src/util/apiHelper.ts +++ b/backend/src/util/apiHelper.ts @@ -1,6 +1,8 @@ import axios, { AxiosRequestConfig } from 'axios'; +import { getLogger } from '../logging/initalize.js'; +import { Logger } from 'winston'; -// !!!! when logger is done -> change +const logger: Logger = getLogger(); /** * Utility function to fetch data from an API endpoint with error handling. @@ -24,16 +26,16 @@ export async function fetchWithLogging( } catch (error: any) { if (error.response) { if (error.response.status === 404) { - console.error( + logger.error( `❌ ERROR: ${description} not found (404) at "${url}".` ); } else { - console.error( + logger.error( `❌ ERROR: Failed to fetch ${description}. Status: ${error.response.status} - ${error.response.statusText} (URL: "${url}")` ); } } else { - console.error( + logger.error( `❌ ERROR: Network or unexpected error when fetching ${description}:`, error.message );