redesigned http logger to output json objects

This commit is contained in:
2025-12-30 20:58:07 -05:00
parent 3848eb939a
commit e6e09f8c3e

View File

@@ -5,24 +5,24 @@ import express = require('express');
import cors = require('cors'); import cors = require('cors');
import morgan = require('morgan'); import morgan = require('morgan');
const app = express() const app = express()
import chalk from 'chalk';
app.use(morgan((tokens: morgan.TokenIndexer, req: express.Request, res: express.Response) => { app.use(morgan((tokens: morgan.TokenIndexer, req: express.Request, res: express.Response) => {
const status = Number(tokens.status(req, res)); return JSON.stringify({
type: 'http',
timestamp: new Date().toISOString(),
// Colorize status code method: tokens.method(req, res),
const statusColor = status >= 500 ? chalk.red path: tokens.url(req, res),
: status >= 400 ? chalk.yellow status: Number(tokens.status(req, res)),
: status >= 300 ? chalk.cyan response_time_ms: Number(tokens['response-time'](req, res)),
: chalk.green;
return [ ip: req.ip,
chalk.gray(`[${new Date().toISOString()}]`), user_agent: req.headers['user-agent'],
chalk.blue.bold(tokens.method(req, res)),
tokens.url(req, res), user: req.user
statusColor(status), ? { id: req.user.id, name: req.user.name }
chalk.magenta(tokens['response-time'](req, res) + ' ms'), : null,
chalk.yellow(`- User: ${req.user?.name ? `${req.user.name} (${req.user.id})` : 'Unauthenticated'}`), });
].join(' ');
}, { }, {
skip: (req: express.Request) => { skip: (req: express.Request) => {
return req.originalUrl === '/members/me'; return req.originalUrl === '/members/me';