Skip to content

Commit 82f5762

Browse files
committed
use timestamped logger
1 parent 9abd551 commit 82f5762

File tree

3 files changed

+50
-14
lines changed

3 files changed

+50
-14
lines changed

apps/webstack/src/lib/logger.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
type LogMethod = (...args: unknown[]) => void;
2+
3+
const formatNow = () =>
4+
new Intl.DateTimeFormat(undefined, {
5+
year: 'numeric',
6+
month: 'short',
7+
day: '2-digit',
8+
hour: '2-digit',
9+
minute: '2-digit',
10+
second: '2-digit',
11+
hour12: false
12+
}).format(new Date());
13+
14+
function withTimestamp(method: LogMethod): LogMethod {
15+
return (...args: unknown[]) => method(`[${formatNow()}]`, ...args);
16+
}
17+
18+
export const logger = {
19+
log: withTimestamp(console.log.bind(console)),
20+
info: withTimestamp(console.info.bind(console)),
21+
warn: withTimestamp(console.warn.bind(console)),
22+
error: withTimestamp(console.error.bind(console)),
23+
debug: withTimestamp(console.debug.bind(console))
24+
};
25+
26+

apps/webstack/src/routes/+layout.svelte

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@
55
}
66
77
let { children }: Props = $props();
8+
9+
if (typeof window !== 'undefined' && import.meta.env.PROD) {
10+
const flagKey = '__withTimestamp';
11+
const c = console as any;
12+
if (!c[flagKey]) {
13+
c[flagKey] = true;
14+
const methodNames = ['log', 'info', 'warn', 'error', 'debug'] as const;
15+
}
16+
}
817
</script>
918

1019
<div class="start">

apps/webstack/src/routes/auth/discord/callback/+server.ts

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { env as pubEnv } from '$env/dynamic/public';
33
import { redirect } from '@sveltejs/kit';
44
import type { RequestHandler } from './$types';
55
import { config } from 'config';
6+
import { logger } from '$lib/logger';
67
import { BotResult } from '$lib/DiscordTypes';
78
import type { DiscordOAuth2User, DiscordData, DiscordErrorResponse } from '$lib/DiscordTypes';
89
import type { RESTGetAPIGuildMemberResult } from 'discord-api-types/rest'
@@ -66,7 +67,7 @@ async function setupUser(user: DiscordOAuth2User, token: string, nickname: strin
6667
case MemberResult.Found: {
6768
const guildMember = content as RESTGetAPIGuildMemberResult;
6869

69-
console.log(`User ${user.id} already exists in the guild. Adding roles...`)
70+
logger.info(`User ${user.id} already exists in the guild. Adding roles...`)
7071
const requiredRoles = config.discord.roles.map((val) => val.id);
7172
const mergedRoles = Array.from(new Set([...guildMember.roles, ...requiredRoles]));
7273
const unchanged = mergedRoles.length === guildMember.roles.length && guildMember.roles.every((id) => mergedRoles.includes(id));
@@ -85,7 +86,7 @@ async function setupUser(user: DiscordOAuth2User, token: string, nickname: strin
8586
}
8687
default:
8788
case MemberResult.NotFound: {
88-
console.log(`User ${user.id} does not exist in the guild. Adding user...`)
89+
logger.info(`User ${user.id} does not exist in the guild. Adding user...`)
8990
const { result, error } = await joinDiscordServer(user, token, nickname);
9091
switch (result) {
9192
case BotResult.Success: {
@@ -141,13 +142,13 @@ async function joinDiscordServer(user: DiscordOAuth2User, token: string, nicknam
141142
// Check if user already exists in the server.
142143
switch (response.status) {
143144
case 201:
144-
console.log(`${user.username}(${user.id}) joined to server.`);
145+
logger.info(`${user.username}(${user.id}) joined to server.`);
145146
break;
146147
case 204:
147-
console.log(`${user.username}(${user.id}) is already in the guild.`);
148+
logger.info(`${user.username}(${user.id}) is already in the guild.`);
148149
break;
149150
case 400: {
150-
console.log(`${user.username}(${user.id}) has reached maximum guilds.`);
151+
logger.warn(`${user.username}(${user.id}) has reached maximum guilds.`);
151152
return {
152153
result: BotResult.Full,
153154
error: json as DiscordErrorResponse
@@ -156,7 +157,7 @@ async function joinDiscordServer(user: DiscordOAuth2User, token: string, nicknam
156157
case 403:
157158
default: {
158159
const errRes = json as DiscordErrorResponse;
159-
console.log(`Error joining ${user.id} to server!: ${response.status}: ${response.statusText} ${errRes.code} ${errRes.message}`);
160+
logger.error(`Error joining ${user.id} to server!: ${response.status}: ${response.statusText} ${errRes.code} ${errRes.message}`);
160161
return {
161162
result: BotResult.Error,
162163
error: errRes
@@ -202,14 +203,14 @@ async function getGuildMember(id: string): Promise<{
202203
result: MemberResult.Found
203204
};
204205
case 404:
205-
console.log(`User ${id} not found in guild.`);
206+
logger.info(`User ${id} not found in guild.`);
206207
return {
207208
content: json as DiscordErrorResponse,
208209
result: MemberResult.NotFound
209210
}
210211
default: {
211212
const errRes = json as DiscordErrorResponse
212-
console.log(`Error checking if user ${id} exists in guild: ${response.status}: ${response.statusText} ${errRes.code} ${errRes.message}`)
213+
logger.error(`Error checking if user ${id} exists in guild: ${response.status}: ${response.statusText} ${errRes.code} ${errRes.message}`)
213214
return {
214215
content: errRes,
215216
result: MemberResult.Error
@@ -255,7 +256,7 @@ async function addRoleToUser(userId: string, roles: string[], token: string, nic
255256
case 404:
256257
default: {
257258
const errRes: DiscordErrorResponse = await response.json()
258-
console.log(`Error adding role to user ${userId}: ${response.status}: ${response.statusText} ${errRes.code} ${errRes.message}`)
259+
logger.error(`Error adding role to user ${userId}: ${response.status}: ${response.statusText} ${errRes.code} ${errRes.message}`)
259260
return {
260261
result: BotResult.Error,
261262
error: errRes
@@ -327,11 +328,11 @@ export const GET = (async ({ url, locals }) => {
327328
return Response.redirect('/');
328329
}
329330

330-
console.log('Code received, getting tokens...')
331+
logger.info('Code received, getting tokens...')
331332
const tokens = await getOAuthTokens(code);
332333

333334
const meData: DiscordData = await getUserData(tokens);
334-
console.log(`User ${meData.user.id} ${meData.user.username}#${meData.user.discriminator} has logged in using discord`);
335+
logger.info(`User ${meData.user.id} ${meData.user.username}#${meData.user.discriminator} has logged in using discord`);
335336

336337
await locals.session.update((data) => {
337338
if (!data.discord)
@@ -342,7 +343,7 @@ export const GET = (async ({ url, locals }) => {
342343
});
343344

344345
const { result, error } = await setupUser(meData.user, tokens.access_token, locals.session.data.osu?.username ?? '');
345-
console.log(`User ${meData.user.id} ${meData.user.username}#${meData.user.discriminator} received: ${BotResult[result]}`);
346+
logger.info(`User ${meData.user.id} ${meData.user.username}#${meData.user.discriminator} received: ${BotResult[result]}`);
346347

347348
if (result === BotResult.Full) {
348349
await locals.session.update((data) => {
@@ -352,7 +353,7 @@ export const GET = (async ({ url, locals }) => {
352353

353354
redirect(302, '/');
354355
} else if (result === BotResult.Error) {
355-
console.error(`Redirecting user due to API side error: ${error?.code}; ${error?.message}`);
356+
logger.error(`Redirecting user due to API side error: ${error?.code}; ${error?.message}`);
356357
await locals.session.update((data) => {
357358
data.error = "An unknown error occured while trying to join the server."
358359
return data;
@@ -363,7 +364,7 @@ export const GET = (async ({ url, locals }) => {
363364

364365
sendMessageToWelcomeChannel(locals.session.data);
365366

366-
console.log(`Discord User joined: ${meData.user.id} - ${meData.user.username}`);
367+
logger.info(`Discord User joined: ${meData.user.id} - ${meData.user.username}`);
367368

368369
redirect(302, '/done');
369370
}) satisfies RequestHandler;

0 commit comments

Comments
 (0)