2024-07-31 14:46:02 +03:00
|
|
|
const pino = require('pino');
|
2024-08-02 21:50:17 +03:00
|
|
|
const pretty = require('pino-pretty');
|
2024-08-12 18:04:35 +03:00
|
|
|
const path = require('path');
|
2024-08-11 17:21:20 +03:00
|
|
|
const config = require('../config/main.js')();
|
2024-07-31 14:46:02 +03:00
|
|
|
|
2024-08-12 18:04:35 +03:00
|
|
|
function getCallerFile() {
|
|
|
|
const originalFunc = Error.prepareStackTrace;
|
|
|
|
|
|
|
|
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';
|
|
|
|
}
|
|
|
|
|
2024-08-11 17:21:20 +03:00
|
|
|
const logger = pino({
|
2024-08-12 18:04:35 +03:00
|
|
|
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;
|
|
|
|
}
|
2024-07-31 14:46:02 +03:00
|
|
|
|
2024-08-12 18:04:35 +03:00
|
|
|
module.exports = wrapLogger(logger);
|