无法将日志数据保存到数据库

时间:2021-02-11 02:50:37

标签: node.js express winston

我已经实现了记录器,它成功登录到 .log 文件,但在尝试将相同的日志保存到 MongoDB 时,它只提供时间戳,但没有提供其他日志详细信息。

winston-logger.js:

const winston = require('winston');
require('winston-mongodb');
dateFormat = () => {
   return new Date(Date.now()).toUTCString()
}
class LoggerService {
  constructor(route) {
    // this.log_data = null
    this.route = route
    const logger = winston.createLogger({
      transports: [
        new winston.transports.Console(),
        new winston.transports.File({
          filename: `./logs/${route}.log`
        }),
        new winston.transports.MongoDB({
          db:process.env.MongoDB,
          collection:'log',
        })
      ],
      format: winston.format.json((info) => {
        console.log('infor', info)
        let message = `${JSON.stringify(info.obj)}`
        return message
      })
    });
    this.logger = logger
  }
  async info(message) {
    this.logger.log('info', message);
  }
  async info(message, obj) {
    // this.logger.log('info', message, {
    //   obj
    // })
    this.logger.log('info', obj)
  }
}
module.exports = LoggerService

在 api api.js 中调用记录器:

const Logger = require('./config/winston-logger');
const logger = new Logger('app')

app.post('test',(req,res) => {
    something something happens
    logger.info("Request success",{"body":req.body})
}

虽然它保存到日志文件中,但试图保存到 mongo-db 中,但只保存了时间戳。

1 个答案:

答案 0 :(得分:0)

我想通了......如果有人面临同样的问题......

//代替json改为metaData并保存在meta中

格式:winston.format.metaData((info) => { console.log('info', info) 让消息 = ${JSON.stringify(info.obj)} 回信 })