Использование Pino в качестве логгера для Sequelize - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь использовать Pino с Sequelize options.logging:

Функция, которая выполняется каждый раз, когда Sequelize регистрирует что-либо. Функция может принимать несколько параметров, но только первый из них выводится console.log. Чтобы напечатать все значения, используйте (... msg) => console.log (msg)

Вот что я пробовал:

const pino = require('pino')
const logger = pino({ level: 'debug', prettyPrint: true })
const Sequelize = require('sequelize')

sequelize = new Sequelize({
  dialect: 'sqlite',
  storage: '../db.sqlite3',
  logging: logger.debug()
})

Но ничего не печатается на приставка. Я знаю, что ведение журнала работает, поскольку я logger.debug('test') работает при вызове в другом месте кода.

Я нашел эту библиотеку (из этой проблемы), но я не совсем уверен, как использовать ее с Sequelize.

1 Ответ

1 голос
/ 20 января 2020

Вам не нужно вызывать свою функцию, вам просто нужно передать ее в Sequelize.

Поэтому, в общем, вы должны написать, например, logging: msg => logger.info(msg). Не беспокойтесь о потере некоторых других параметров, console.log использует только первый (как описано в документации ).

Простой рабочий пример:

{
  // ...

  logging: sql => logger.info(sql),

  // ...
}

Полный (или почти полный) клон поведения console.log:

{
  // ...

  logging: (sql, timing) => logger.info(sql, typeof timing === 'number' ? `Elapsed time: ${timing}ms` : ''),

  // ...
}

Совет: Вы можете использовать опцию logging для каждого из ваших запросов, и они, очевидно, будут работать одинаково.

Совет № 2: Вы также можете использовать logging: logger.info.bind(logger). Но вы, вероятно, будете искать другой обходной путь, если выберете этот:)

...