Add logging with Winston

This commit is contained in:
Hannah dagemark 2026-09-15 11:34:39 +02:00
commit 9293c92e58
8 changed files with 357 additions and 25 deletions

View file

@ -1,5 +1,7 @@
import { RequestInit } from "next/dist/server/web/spec-extension/request";
import logger from "../logging/logger";
const FRONTEND_URL = process.env.NEXT_PUBLIC_FRONTEND_URL;
export async function cmFetch<T>(
@ -25,7 +27,7 @@ export async function cmFetchRaw(
if (!response.ok && !ignoreStatuses?.includes(response.status)) {
throw new Error("Request failed");
}
console.log(response);
logger.log("debug", response); // debug: cmFetch response logging
return response;
}

View file

@ -1,4 +1,5 @@
import { getSessionToken } from "@/lib/server_functions/userAuth";
import logger from "@/lib/logging/logger";
import { cmFetch, cmFetchRaw } from "../cmFetch";
import { Token, User } from "../types";
@ -20,14 +21,11 @@ export async function getUser(id: number) {
}
export async function loginUser(user: FormData) {
console.log(`Recieved login user request for form: `);
for (const value of user.values()) {
console.log(value);
}
const body = {
username: user.get("username"),
password: user.get("password"),
};
logger.log("debug", `Recieved login user request for form: ${body}`); // debug login form submission
return cmFetch<Token>(`/api/users/login`, {
method: "POST",
headers: {

36
lib/logging/logger.ts Normal file
View file

@ -0,0 +1,36 @@
import winston from "winston";
const logger = winston.createLogger({
level: "info",
format: winston.format.json(),
defaultMeta: { service: "user-service" },
transports: [
//
// - Write all logs with importance level of `error` or higher to `error.log`
// (i.e., error, fatal, but not other levels)
//
new winston.transports.File({ filename: "error.log", level: "error" }),
//
// - Write all logs with importance level of `info` or higher to `combined.log`
// (i.e., fatal, error, warn, and info, but not trace)
//
new winston.transports.File({ filename: "combined.log" }),
],
});
//
// If we're not in production then log to the `console` with the format:
// `${info.level}: ${info.message} JSON.stringify({ ...rest }) `
//
if (process.env.NODE_ENV !== "production") {
logger.add(
new winston.transports.Console({
format: winston.format.simple(),
}),
);
logger.configure({
level: "debug",
});
}
export default logger;

View file

@ -4,11 +4,12 @@ import { redirect } from "next/navigation";
import { createUser, loginUser } from "../api/helpers/users";
import { Token } from "../api/types";
import logger from "../logging/logger";
export async function login(formData: FormData) {
"use server";
const token = await loginUser(formData);
console.log(`Fetched following token for login: ${token}`);
logger.log("debug", `Fetched following token for login: ${token}`); // token check for backend debugging
await createSession(token);
redirect("/Admin/Overview");
}
@ -17,6 +18,7 @@ export async function signup(formData: FormData) {
// Technically same code as login for now but will do different stuff with it later so separating it early on
"use server";
const token = await createUser(formData);
logger.log("debug", `Fetched following token for login: ${token}`); // token check for backend debugging
await createSession(token);
redirect("/Admin/Overview");
}
@ -35,7 +37,7 @@ export async function createSession(token: Token) {
export async function getSessionToken() {
const cookieStore = await cookies();
console.log(cookieStore.getAll());
logger.log("debug", cookieStore.getAll()); // debug: log cookies when checking for session token, ideally logs session token too
const token = cookieStore.get("access_token")?.value;
return token ? token : null;