Возможно ли иметь отдельные журналы для каждой схемы postgresql в nodejs? - PullRequest
0 голосов
/ 27 декабря 2018

Я использую nodejs с базой данных postgres и множеством схем (и pm2 в качестве менеджера процессов).Каждая схема является пользователем, поэтому в каждом запросе я передаю имя схемы в качестве параметра.На данный момент все console.logs записаны в один файл, повернутый pm2.Моя цель - создать отдельный журнал для каждой схемы / пользователя, например, user_1.log, user_2.log и так далее.Есть ли способ / узел модуля, чтобы сделать это?

спасибо

1 Ответ

0 голосов
/ 28 декабря 2018

Как насчет передачи пользовательского пути к файлу журнала и переменной среды при запуске процесса pm2?

SCHEMA_USER=user_1 pm2 start app.js -i 1 -o ./logs/user_1.log -e ./logs/user_1.err

SCHEMA_USER=user_2 pm2 start app.js -i 1 -o ./logs/user_2.log -e ./logs/user_2.err

или Вы можете использовать simple-node-logger и создать хранилище логгера, которое будет доставлять объектыкоторый войдет в нужное вам место.

создайте log-manager.js где-нибудь с таким содержимым:

const path = require('path');
const SimpleNodeLogger = require('simple-node-logger'),

class LogManager {
  static instances = {};

  static get(key) {
    if (!key) return console;
    if (Logger.instances[key]) return Logger.instances[key];

    const opts = {
        logFilePath: path.join(__dirname, 'logs', key+'.log'),
        timestampFormat: 'YYYY-MM-DD HH:mm:ss.SSS'
    },
    return Logger.instances[key] = SimpleNodeLogger.createSimpleLogger(opts);
  }
}

module.exports = LogManager;

и используйте его, например, с экспресс-приложением:

const logManager = require('./log-manager');

request.get('/users/:id', (req, res) => {
  const logger = logManager.get('user_' + req.params.id);
  // doing somethings
  logger.error('User not found');
  req.status(404).send({});
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...