diff --git a/logger/main.js b/logger/main.js index ce6d1b2..cddb032 100644 --- a/logger/main.js +++ b/logger/main.js @@ -1,9 +1,58 @@ const pino = require('pino'); const pretty = require('pino-pretty'); +const path = require('path'); const config = require('../config/main.js')(); -const logger = pino({ - level: config['server']['log']['level'] ? config['server']['log']['level'] : null, - }, pretty()); +function getCallerFile() { + const originalFunc = Error.prepareStackTrace; -module.exports = logger; \ No newline at end of file + let callerFile; + try { + const err = new Error(); + let currentFile; + + Error.prepareStackTrace = function (err, stack) { return stack; }; + currentFile = err.stack.shift().getFileName(); + + while (err.stack.length) { + callerFile = err.stack.shift().getFileName(); + if (currentFile !== callerFile) break; + } + } catch (e) {} + + Error.prepareStackTrace = originalFunc; + + return callerFile ? path.basename(callerFile) : 'unknown'; +} + +const logger = pino({ + level: config['server']['log']['level'] ? config['server']['log']['level'] : 'info', + prettifier: pretty, + prettify: true, + messageKey: 'msg', + timestampKey: 'time', +}, pretty({ + ignore: 'pid,hostname', + messageFormat: '{msg}', +})); + +function wrapLogger(logger) { + const levels = ['fatal', 'error', 'warn', 'info', 'debug', 'trace']; + + const wrappedLogger = {}; + + levels.forEach(level => { + wrappedLogger[level] = function (msg, ...args) { + const callerFile = getCallerFile(); + const msgWithFilename = `[${callerFile}] ${msg}`; + + logger[level](msgWithFilename, ...args); + }; + }); + + wrappedLogger.child = logger.child.bind(logger); + + return wrappedLogger; +} + +module.exports = wrapLogger(logger);