From 2c9a28f80b9ffac556357be85ce07977452a7b8a Mon Sep 17 00:00:00 2001 From: Redume Date: Mon, 12 Aug 2024 18:04:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=B2?= =?UTF-8?q?=20=D0=BB=D0=BE=D0=B3=D0=B0=D1=85=20=D0=BF=D0=B8=D1=88=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logger/main.js | 57 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 4 deletions(-) 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);