Files
flyer-crawler.projectium.com/src/services/logger.server.ts
2025-12-24 09:39:49 -08:00

44 lines
1.3 KiB
TypeScript

// src/services/logger.server.ts
/**
* SERVER-SIDE LOGGER
* This file configures and exports a singleton `pino` logger instance for
* server-side use, adhering to ADR-004 for structured JSON logging.
*/
import pino from 'pino';
const isProduction = process.env.NODE_ENV === 'production';
const isTest = process.env.NODE_ENV === 'test';
export const logger = pino({
level: isProduction ? 'info' : 'debug',
// Use pino-pretty for human-readable logs in development, and JSON in production.
// Disable transport in tests to prevent worker thread issues.
transport:
isProduction || isTest
? undefined
: {
target: 'pino-pretty',
options: {
colorize: true,
translateTime: 'SYS:standard',
ignore: 'pid,hostname', // These are useful in production, but noisy in dev.
},
},
// As per ADR-004, we centralize sanitization here.
// This automatically redacts sensitive fields from all log objects.
// The paths target keys within objects passed to the logger.
redact: {
paths: [
'req.headers.authorization',
'req.headers.cookie',
'*.body.password',
'*.body.newPassword',
'*.body.currentPassword',
'*.body.confirmPassword',
'*.body.refreshToken',
'*.body.token',
],
censor: '[REDACTED]',
},
});