Skip to content

Commit b54c570

Browse files
committed
Cleanup logger impl
1 parent 25f5a99 commit b54c570

9 files changed

Lines changed: 86 additions & 14 deletions

File tree

apps/backend/src/controllers/badgeController.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,13 @@ const handleBadgeRequest = async (req, res, next, entityType, badgeType) => {
139139
if (!data) {
140140
const errorMessage = getErrorMessage(entityConfig.platformName, entityConfig.entityName);
141141

142-
logger.warn(`Error showing ${entityConfig.platformName} ${entityConfig.entityName} ${badgeType} badge for "${identifier}": ${errorMessage}`);
142+
logger.warn({
143+
platform: entityConfig.platformName,
144+
entity: entityConfig.entityName,
145+
badge: badgeType,
146+
identifier,
147+
errorMessage
148+
}, "Error fetching badge data");
143149

144150
const notFoundSvg = generateBadge(badgeConfig.label, "Not found", entityConfig.platformName, defaultColor, null, "#f38ba8", showIcon, showBorder);
145151

@@ -187,7 +193,13 @@ const handleBadgeRequest = async (req, res, next, entityType, badgeType) => {
187193
} catch (err) {
188194
const identifier = req.params.username || req.params.slug || req.params.id || req.params.projectId;
189195
const entityConfig = ENTITY_CONFIG[entityType];
190-
logger.warn(`Error showing ${entityConfig.platformName} ${entityConfig.entityName} ${badgeType} badge for "${identifier}": ${err.message}`);
196+
logger.warn({
197+
err,
198+
platform: entityConfig.platformName,
199+
entity: entityConfig.entityName,
200+
badge: badgeType,
201+
identifier
202+
}, "Error rendering badge");
191203
next(err);
192204
}
193205
};

apps/backend/src/controllers/cardController.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,12 @@ const handleCardRequest = async (req, res, next, cardType) => {
153153
if (!data) {
154154
const errorMessage = getErrorMessage(config.platformId, config.entityName);
155155

156-
logger.warn(`Error showing ${config.platformId} ${config.entityName} card for "${identifier}": ${errorMessage}`);
156+
logger.warn({
157+
platform: config.platformId,
158+
entity: config.entityName,
159+
identifier,
160+
errorMessage
161+
}, "Error fetching card data");
157162

158163
// Generate error card with platform-specific branding
159164
const errorSvg = generateErrorCard(
@@ -209,7 +214,12 @@ const handleCardRequest = async (req, res, next, cardType) => {
209214
} catch (err) {
210215
const config = CARD_CONFIGS[cardType];
211216
const identifier = req.params[config.paramKey];
212-
logger.warn(`Error showing ${config.platformId} ${config.entityName} card for "${identifier}": ${err.message}`);
217+
logger.warn({
218+
err,
219+
platform: config.platformId,
220+
entity: config.entityName,
221+
identifier
222+
}, "Error rendering card");
213223
next(err);
214224
}
215225
};

apps/backend/src/controllers/curseforgeController.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ export const getCfUserLookup = async (req, res) => {
5353

5454
res.json({ id: userId });
5555
} catch (err) {
56-
logger.warn(`Error looking up Curseforge user "${req.params.username}": ${err.message}`);
56+
logger.warn({
57+
err,
58+
platform: PLATFORM.CURSEFORGE,
59+
username: req.params.username
60+
}, "Error looking up CurseForge user");
5761
res.status(404).json({ error: "User not found", message: err.message });
5862
}
5963
};
@@ -78,7 +82,11 @@ export const getCfSlugLookup = async (req, res) => {
7882

7983
res.json({ id: modId });
8084
} catch (err) {
81-
logger.warn(`Error looking up Curseforge slug "${req.params.slug}": ${err.message}`);
85+
logger.warn({
86+
err,
87+
platform: PLATFORM.CURSEFORGE,
88+
slug: req.params.slug
89+
}, "Error looking up CurseForge slug");
8290
res.status(404).json({ error: "Project not found", message: err.message });
8391
}
8492
};
@@ -139,7 +147,12 @@ export const getCurseforgeMeta = async (req, res, next) => {
139147
res.setHeader("Cache-Control", `public, max-age=${API_CACHE_TTL}`);
140148
res.json(result);
141149
} catch (err) {
142-
logger.warn(`Error fetching curseforge meta for "${req.params.type}" "${req.params.id}": ${err.message}`);
150+
logger.warn({
151+
err,
152+
platform: PLATFORM.CURSEFORGE,
153+
entity: req.params.type,
154+
identifier: req.params.id
155+
}, "Error fetching meta");
143156
next(err);
144157
}
145158
};

apps/backend/src/controllers/hangarController.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,12 @@ export const getHangarMeta = async (req, res, next) => {
6060
res.setHeader("Cache-Control", `public, max-age=${API_CACHE_TTL}`);
6161
res.json(result);
6262
} catch (err) {
63-
logger.warn(`Error fetching hangar meta for "${req.params.slug}": ${err.message}`);
63+
logger.warn({
64+
err,
65+
platform: PLATFORM.HANGAR,
66+
slug: req.params.slug,
67+
entity: req.query.type === "user" ? "user" : "project"
68+
}, "Error fetching meta");
6469
next(err);
6570
}
6671
};

apps/backend/src/controllers/modrinthController.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,40 @@ export const getModrinthMeta = async (req, res, next) => {
2525

2626
let name = id;
2727
let url = null;
28+
let data = null;
2829

2930
if (type === "user") {
3031
const user = await modrinthClient.getUser(id);
32+
data = user;
33+
if (!data) {
34+
return res.status(404).json({ error: "User not found" });
35+
}
3136
name = user.username;
3237
url = `https://modrinth.com/user/${id}`;
3338
} else if (type === "project") {
3439
const project = await modrinthClient.getProjectV3(id);
40+
data = project;
41+
if (!data) {
42+
return res.status(404).json({ error: "Project not found" });
43+
}
3544
name = project.name || project.title;
3645
const projectType = project.project_types?.[0] || project.project_type;
3746
const urlSegment = PROJECT_TYPE_URL_SEGMENT[projectType] || projectType;
3847
url = `https://modrinth.com/${urlSegment}/${id}`;
3948
} else if (type === "organization") {
4049
const org = await modrinthClient.getOrganization(id);
50+
data = org;
51+
if (!data) {
52+
return res.status(404).json({ error: "Organization not found" });
53+
}
4154
name = org.name;
4255
url = `https://modrinth.com/organization/${id}`;
4356
} else if (type === "collection") {
4457
const collection = await modrinthClient.getCollection(id);
58+
data = collection;
59+
if (!data) {
60+
return res.status(404).json({ error: "Collection not found" });
61+
}
4562
name = collection.name;
4663
url = `https://modrinth.com/collection/${id}`;
4764
}
@@ -52,7 +69,12 @@ export const getModrinthMeta = async (req, res, next) => {
5269
res.setHeader("Cache-Control", `public, max-age=${API_CACHE_TTL}`);
5370
res.json(result);
5471
} catch (err) {
55-
logger.warn(`Error fetching modrinth meta for "${req.params.type}" "${req.params.id}": ${err.message}`);
72+
logger.warn({
73+
err,
74+
platform: PLATFORM.MODRINTH,
75+
entity: req.params.type,
76+
identifier: req.params.id
77+
}, "Error fetching meta");
5678
next(err);
5779
}
5880
};

apps/backend/src/controllers/spigotController.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,12 @@ export const getSpigotMeta = async (req, res, next) => {
5757
res.setHeader("Cache-Control", `public, max-age=${API_CACHE_TTL}`);
5858
res.json(result);
5959
} catch (err) {
60-
logger.warn(`Error fetching spigot meta for ${req.params.id}: ${err.message}`);
60+
logger.warn({
61+
err,
62+
platform: PLATFORM.SPIGOT,
63+
identifier: req.params.id,
64+
entity: req.query.type === "author" ? "author" : "resource"
65+
}, "Error fetching meta");
6166
next(err);
6267
}
6368
};

apps/backend/src/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,5 @@ app.use(errorHandler);
5151

5252
app.listen(port, () =>
5353
{
54-
logger.info(`Listening on port ${port}`);
55-
});
54+
logger.info({ port }, "Server listening");
55+
});

apps/backend/src/services/hangarClient.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,12 @@ export class HangarClient extends BasePlatformClient
245245
await fetchVersionDatesForProjects(projects, getVersionsForSparkline);
246246
allVersionDates = projects.flatMap(p => p.versionDates || []);
247247
} catch (err) {
248-
logger.warn(`Failed to fetch version dates for Hangar user "${username}": ${err.message}`);
248+
logger.warn({
249+
err,
250+
platform: "hangar",
251+
entity: "user",
252+
username
253+
}, "Error fetching version dates");
249254
allVersionDates = [];
250255
}
251256
} catch {

apps/backend/src/utils/imageFetcher.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export async function fetchImageAsBase64(url, convertToPng = false)
4242
return { data: `data:${mimeType};base64,${base64}`, conversionTime };
4343
} catch (error)
4444
{
45-
logger.warn(`Failed to fetch image ${url}: ${error.message}`);
45+
logger.warn({ err: error, url, convertToPng }, "Error fetching image");
4646
return null;
4747
}
4848
});

0 commit comments

Comments
 (0)