mirror of
https://github.com/BradNut/boredgame
synced 2025-09-08 17:40:22 +00:00
70 lines
2.1 KiB
TypeScript
70 lines
2.1 KiB
TypeScript
import { Client } from '@axiomhq/axiom-node';
|
|
import { AXIOM_TOKEN, AXIOM_ORG_ID, AXIOM_DATASET } from '$env/static/private';
|
|
import getAllUrlParams from '$lib/util/getAllUrlParams';
|
|
import parseTrack from '$lib/util/parseTrack';
|
|
import parseMessage from '$lib/util/parseMessage';
|
|
import { DOMAIN } from '$lib/config/constants';
|
|
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
//@ts-ignore
|
|
export default async function log(statusCode: number, event) {
|
|
try {
|
|
let level = 'info';
|
|
if (statusCode >= 400) {
|
|
level = 'error';
|
|
}
|
|
const error = event?.locals?.error || undefined;
|
|
const errorId = event?.locals?.errorId || undefined;
|
|
const errorStackTrace = event?.locals?.errorStackTrace || undefined;
|
|
let urlParams = {};
|
|
if (event?.url?.search) {
|
|
urlParams = await getAllUrlParams(event?.url?.search);
|
|
}
|
|
let messageEvents = {};
|
|
if (event?.locals?.message) {
|
|
messageEvents = await parseMessage(event?.locals?.message);
|
|
}
|
|
let trackEvents = {};
|
|
if (event?.locals?.track) {
|
|
trackEvents = await parseTrack(event?.locals?.track);
|
|
}
|
|
|
|
let referer = event.request.headers.get('referer');
|
|
if (referer) {
|
|
const refererUrl = await new URL(referer);
|
|
const refererHostname = refererUrl.hostname;
|
|
if (refererHostname === 'localhost' || refererHostname === DOMAIN) {
|
|
referer = refererUrl.pathname;
|
|
}
|
|
} else {
|
|
referer = undefined;
|
|
}
|
|
const logData: object = {
|
|
level: level,
|
|
method: event.request.method,
|
|
path: event.url.pathname,
|
|
status: statusCode,
|
|
timeInMs: Date.now() - event?.locals?.startTimer,
|
|
user: event?.locals?.user?.email,
|
|
userId: event?.locals?.user?.userId,
|
|
referer: referer,
|
|
error: error,
|
|
errorId: errorId,
|
|
errorStackTrace: errorStackTrace,
|
|
...urlParams,
|
|
...messageEvents,
|
|
...trackEvents
|
|
};
|
|
console.log('log: ', JSON.stringify(logData));
|
|
if (!AXIOM_TOKEN || !AXIOM_ORG_ID || !AXIOM_DATASET) {
|
|
return;
|
|
}
|
|
const client = new Client({
|
|
token: AXIOM_TOKEN,
|
|
orgId: AXIOM_ORG_ID
|
|
});
|
|
await client.ingestEvents(AXIOM_DATASET, [logData]);
|
|
} catch (err) {
|
|
throw new Error(`Error Logger: ${JSON.stringify(err)}`);
|
|
}
|
|
}
|