【问题标题】:Using Pino as a logger for Sequelize使用 Pino 作为 Sequelize 的记录器
【发布时间】:2020-01-21 04:45:33
【问题描述】:

我正在尝试将PinoSequelizeoptions.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') 在代码中的其他地方调用时工作。

我找到了 this 库(来自 this 问题),但我不确定如何将它与 Sequelize 一起使用。

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    您不需要调用您的函数,只需将其传递给 Sequelize。

    所以基本上你应该写logging: msg => logger.info(msg),例如。不用担心丢失一些其他参数,console.log 只使用第一个(如documentation 中所述)。

    简单的工作示例:

    {
      // ...
    
      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)。但是如果你选择这个,你可能会寻找另一种解决方法:)

    【讨论】:

    • 谢谢,这行得通。但在您的第二个示例中,timing 是一个包含查询详细信息的 JSON 对象,而不是数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2020-07-28
    • 2021-12-10
    • 2022-01-12
    • 2020-12-10
    • 2018-06-02
    • 1970-01-01
    相关资源
    最近更新 更多