mirror of
https://github.com/andwati/order-service.git
synced 2026-10-18 10:22:52 +00:00
logging with morgan setup
This commit is contained in:
+5
-1
@@ -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
@@ -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());
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user