【问题标题】:Unable to Save Logs to mongodb Database for winston-nodejs无法将日志保存到 winston-nodejs 的 mongodb 数据库
【发布时间】:2012-12-06 04:33:09
【问题描述】:

我正在使用 winston 库:https://github.com/flatiron/winston 尝试将数据存储到 mongodb 数据库中:https://github.com/indexzero/winston-mongodb

插入我使用的数据:

var MongoDB = require('winston-mongodb').MongoDB;
var logger = new (winston.Logger)({
transports: [
    new (winston.transports.Console)(),
    new (winston.transports.MongoDB)({ host: ip,  db: 'caribcultivate', collection: 'log', level: 'info'})
], exceptionHandlers: [ new winston.transports.Console() ]
});
logger.log('info', "Running logs "+ d);
logger.info("Drive: "+ (new Date(d)).toDateString());

但是,当我尝试使用以下方式查询数据时:

winston.query(options, function (err, results) {
    if (err) {console.log(err);}
    console.log(results);
});

我明白了:

{}

它适用于控制台,并且我在应用程序的其他部分中使用该数据库和 Mongoose 库。

【问题讨论】:

  • 我遇到了同样的问题。我正在使用与上面基本相同的代码的 MongoHQ。你有没有运气解决这个问题?
  • 不幸的是没有。考虑到这不是核心要求,我最终没有使用 mongodb,而是使用流写入文件。我希望在工作量减轻后重新审视这个问题。

标签: node.js mongodb logging winston


【解决方案1】:

我遇到了类似的问题。结果对我来说问题是 Winston MongoDB 传输期望主机选项只是主机名,我在它前面加上 mongodb://

mongodb://123456.mongolab.com 中删除mongodb:// 后,以下对我有用:

var logger = new(winston.Logger)({
    transports : [
        new(winston.transports.MongoDB)({
            db : 'logs',
            host : '123456.mongolab.com',
            username : 'username',
            password : 'password'
        })
    ]
});

【讨论】:

  • 我正在尝试这个。 +1 击中目标和干净的代码。
  • 使用最新的 winston-mongodb,您现在可以使用 dbUri 选项代替主机、端口、dbname 等。
  • @aarosil,只需使用db 参数添加所有内容,例如db : 'mongodb://myuser:mypass@ds047777.mongolab.com:54545/MyLogDB
【解决方案2】:

应该就是这么简单,一行就完事了:

db : 'mongodb://myuser:mypass@ds047777.mongolab.com:54545/MyLogDB

【讨论】:

    【解决方案3】:

    如果您在 2021 年使用它,这是使用 MONGODB 的 logger.js 示例

    mongodb://<username>:<password>@mernshopping-shard-00-00.tzqom.mongodb.net:27017,mernshopping-shard-00-01.tzqom.mongodb.net:27017,mernshopping-shard-00-02.tzqom.mongodb.net:27017/myFirstDatabase?ssl=true&replicaSet=MernShopping-shard-0&authSource=admin&retryWrites=true&w=majority
    
    const {createLogger, format, transports} =require('winston');
    require('winston-mongodb');
    const env= require('dotenv');
    env.config();
    
    const MONGO_URI = process.env.WINSTON_MONGODB_URI;
    
    module.exports = createLogger({
        transports:[
    
     // File transport
        new transports.File({
        filename: 'logs/winstonLogs.log',
        format:format.combine(
            format.timestamp({format: 'MMM-DD-YYYY HH:mm:ss'}),
            format.align(),
            format.printf(info => `${info.level}: ${[info.timestamp]}: ${info.message}`),
        )}),
        new transports.MongoDB({
            level:'info',
            db: MONGO_URI,
            options:{
                useUnifiedTopology:true
            },
            collection:'server_logs',
            format:format.combine(
                format.timestamp(),
                //convert logs to a json format for mongodb
                format.json()
                    )
        })
        ]
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 2017-12-26
      • 2020-11-04
      • 2021-10-26
      • 2019-11-03
      • 1970-01-01
      相关资源
      最近更新 更多