logging with morgan setup

This commit is contained in:
2026-01-13 18:39:10 +03:00
parent 8e385887de
commit b74197f60f
2 changed files with 41 additions and 5 deletions
+5 -1
View File
@@ -4,6 +4,7 @@ import cors from "cors";
import morgan from "morgan";
import { errorHandler } from "./middleware/error.middleware.js";
import { logger } from "./utils/logger.js";
import authRoutes from "./routes/auth.routes.js";
import productRoutes from "./routes/product.routes.js";
import orderRoutes from "./routes/order.routes.js";
@@ -15,7 +16,10 @@ const app: Application = express();
//global middleware
app.use(cors());
app.use(express.json());
app.use(morgan("dev"));
// HTTP request logging with morgan
const morganFormat = ":method :url :status :res[content-length] - :response-time ms";
app.use(morgan(morganFormat, { stream: logger.stream }));
// health check route
app.get("/health", (req, res) => {
+36 -4
View File
@@ -1,13 +1,33 @@
type LogMeta = Record<string, unknown>;
function format(level: string, message: string, meta?: LogMeta) {
type LogLevel = "debug" | "info" | "warn" | "error" | "http";
const LOG_COLORS: Record<LogLevel, string> = {
debug: "\x1b[36m", // cyan
info: "\x1b[32m", // green
warn: "\x1b[33m", // yellow
error: "\x1b[31m", // red
http: "\x1b[35m", // magenta
};
const RESET = "\x1b[0m";
function format(level: LogLevel, message: string, meta?: LogMeta): string {
const timestamp = new Date().toISOString();
return meta
? `[${timestamp}] ${level.toUpperCase()} ${message} ${JSON.stringify(meta)}`
: `[${timestamp}] ${level.toUpperCase()} ${message}`;
const color = LOG_COLORS[level];
const levelStr = `${color}${level.toUpperCase().padEnd(5)}${RESET}`;
const baseLog = `[${timestamp}] ${levelStr} ${message}`;
return meta ? `${baseLog} ${JSON.stringify(meta)}` : baseLog;
}
export const logger = {
debug(message: string, meta?: LogMeta) {
if (process.env.NODE_ENV !== "production") {
console.log(format("debug", message, meta));
}
},
info(message: string, meta?: LogMeta) {
console.log(format("info", message, meta));
},
@@ -19,4 +39,16 @@ export const logger = {
error(message: string, meta?: LogMeta) {
console.error(format("error", message, meta));
},
http(message: string, meta?: LogMeta) {
console.log(format("http", message, meta));
},
// Stream for morgan integration
stream: {
write(message: string) {
// Remove trailing newline from morgan
logger.http(message.trim());
},
},
};