diff --git a/src/Middleware/error/handler.ts b/src/Middleware/error/handler.ts index d182f19..33f3448 100644 --- a/src/Middleware/error/handler.ts +++ b/src/Middleware/error/handler.ts @@ -1,6 +1,7 @@ import { PrismaClientUnknownRequestError } from "@prisma/client/runtime"; import { NextFunction, Request, Response } from "express"; import ForwardableError from "./ForwardableError"; +import logger from "./logger"; const env = process.env.NODE_ENV || "production"; @@ -20,6 +21,8 @@ export default function defaultErrorHandler(err: any, req: Request, res: Respons } if (err instanceof PrismaClientUnknownRequestError) { + logger.warning(err); + return res.status(404).json({ type: "error", payload: { diff --git a/src/Middleware/error/logger.ts b/src/Middleware/error/logger.ts new file mode 100644 index 0000000..184f5f7 --- /dev/null +++ b/src/Middleware/error/logger.ts @@ -0,0 +1,39 @@ +import winston, { createLogger } from "winston"; + +const { + format: { printf, colorize, combine, timestamp, json, errors, prettyPrint }, +} = winston; + +const defaultJsonFormat = combine(errors({ stack: true }), timestamp(), json({ space: 2 })); + +const customCLIFormat = printf(({ level, message, label, timestamp, stack }) => { + let output = `${level}${stack ? `(1/2:message)` : ""} at ${timestamp}${label ? ` (#${label})` : ""}: ${message}\n`; + + if (stack) { + output += `\n${level}(2/2:stack)${label ? ` (#${label})` : ""}: ${stack}\n\n`; + } + + return output; +}); + +export default createLogger({ + levels: winston.config.syslog.levels, + format: combine(errors({ stack: true }), timestamp()), + transports: [ + new winston.transports.Console({ + level: "debug", + format: combine(timestamp(), colorize(), customCLIFormat), + }), + new winston.transports.File({ + filename: "/app/error.log", + level: "error", + format: defaultJsonFormat, + }), + new winston.transports.File({ + level: "debug", + filename: "/app/debug.log", + format: defaultJsonFormat, + silent: !(process.env.NODE_ENV === "development"), // Silent when not in development + }), + ], +});