UNPKG

@mccann-hub/json-logger

Version:

A secure, configurable JSON logger built on Winston for Node.js and Deno applications. Supports custom log levels, structured JSON output, sensitive data sanitization, and error handling for multi-environment setups.

88 lines 3.17 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = Logger; const winston_1 = __importDefault(require("winston")); const node_process_1 = __importDefault(require("node:process")); const node_fs_1 = require("node:fs"); const sanitize_1 = __importDefault(require("./utils/sanitize")); const levels = { error: 0, warn: 1, http: 2, info: 3, debug: 4, }; const loggerLevel = (env) => { if (node_process_1.default.env.WINSTON_LEVEL) { return node_process_1.default.env.WINSTON_LEVEL; } switch (env) { case 'local-test': return 'error'; case 'local': case 'dev': case 'development': return 'debug'; default: return 'info'; } }; const colors = { error: 'red', warn: 'yellow', http: 'magenta', info: 'green', debug: 'white', }; winston_1.default.addColors(colors); const format = (env, sensitiveKeys, prettyPrintEnvs = ['local']) => { const sanitizeLogs = (0, sanitize_1.default)(sensitiveKeys); return winston_1.default.format.combine(winston_1.default.format.errors({ stack: true }), winston_1.default.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }), winston_1.default.format((info) => { const levelSym = Symbol.for('level'); const sanitizedInfo = sanitizeLogs(info); sanitizedInfo[levelSym] = info[levelSym]; return sanitizedInfo; })(), prettyPrintEnvs.includes(env) ? winston_1.default.format.json({ replacer: undefined, space: 2 }) : winston_1.default.format.json(), winston_1.default.format.colorize({ all: env === 'local' })); }; const defaultTransports = [ new winston_1.default.transports.Console(), new winston_1.default.transports.File({ filename: node_process_1.default.env.LOGGER_ERROR_PATH || './logs/error.log', level: 'error', }), ]; function getAppName() { let appName; if ((0, node_fs_1.existsSync)('./package.json')) { appName = JSON.parse((0, node_fs_1.readFileSync)('./package.json', 'utf-8')).name; } else if ((0, node_fs_1.existsSync)('./deno.json')) { appName = JSON.parse((0, node_fs_1.readFileSync)('./deno.json', 'utf-8')).name; } else { appName = node_process_1.default.env.LOGGER_APP_NAME ?? ''; } return appName; } function Logger(transports = defaultTransports, sensitiveKeys = ['SECRET', 'PASSWORD', 'TOKEN', 'KEY'], prettyPrintEnvs = ['local']) { const env = node_process_1.default.env.NODE_ENV || 'development'; return winston_1.default.createLogger({ level: loggerLevel(env), defaultMeta: { app: getAppName(), environment: env, }, levels, format: format(env, sensitiveKeys, prettyPrintEnvs), transports, exceptionHandlers: transports, rejectionHandlers: transports, exitOnError: !['local', 'dev', 'development'].includes(env), }); } //# sourceMappingURL=index.js.map