无效的传输,必须是带有log方法的对象winston mongodb logging

时间:2018-08-06 07:00:54

标签: javascript node.js mongodb mongoose winston

我想将错误日志存储在mongoDB集合中。我正在使用winston和winston -mongoDB。

得到错误:

  

抛出新错误(“无效的传输,必须是带有日志的对象   方法。');错误:传输无效,必须是带有日志的对象   方法。

这是记录器文件中的代码。     这是我的代码:     从'app-root-path'导入appRoot;     导入{         createLogger,         运输,         格式,     }来自“温斯顿”;

import * as winston from 'winston';


require('winston-mongodb');


const options = {
    fileInfo: {
        level: 'info',
        filename: `${appRoot}/logs/info.log`,
        handleExceptions: true,
        json: true,
        maxsize: 5242880, // 5MB
        maxFiles: 5,
        colorize: false,
        timestamp: true,
    },
    mongoDB: {
        db: 'mongodb://127.0.0.1:27017/test',
        collection: 'log',
        level: 'info',
        storeHost: true,
        capped: true,
    },
};

winston.add(winston.transports.MongoDB, options.mongoDB);


const logger = createLogger({
    format: format.combine(
        format.timestamp({
            format: 'YYYY-MM-DD HH:mm:ss',
        }),
        format.json()
    ),
    transports: [
        new transports.File(options.fileInfo)
    ],
});

logger.stream = {
    write: (message, encoding) => {
        logger.info(message);
    },
};

export default logger;

版本:

 "mongoose": "^5.2.6",
    "morgan": "^1.9.0",
    "winston": "^3.0.0",
    "winston-mongodb": "^4.0.3",
    mongodb@3.1.1

5 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我要做的就是替换以下语句:

winston.add(winston.transports.File, { filename: 'logfile.log' });

对此:

winston.add(new winston.transports.File({ filename: 'logfile.log' }));

这种情况发生在winston的最新主要更新版本(即3.x.x及更高版本)中。

希望这会有所帮助!

答案 1 :(得分:1)

更新的答案:

您需要在Winston初始化中添加mongo传输。

尝试以下代码:

const logger = winston.createLogger({
    transports: [
        new winston.transports.MongoDB({
            db: 'mongodb://localhost:27017/test',
            collection: 'log',
            level: 'info',
            storeHost: true,
            capped: true,
        })
    ]
});

检查测试数据库中的日志收集。

确保您拥有:

logger.info("Test log!")

希望这可以解决您的查询!

答案 2 :(得分:1)

这是截至目前的最新版本。

"猫鼬": "^5.11.10", "温斯顿": "^3.3.3", "winston-mongodb": "^5.0.5"

我遇到了同样的问题。这就是解决我的问题

winston.add(
  new winston.transports.File({ filename: "logfile.log", level: "error" })
);
winston.add(
  new winston.transports.MongoDB({ db: "mongodb://localhost/vidly" })
);

答案 3 :(得分:0)

我遇到了类似的问题,所以我所做的是将package.json的行从"winston": "^3.0.0"更改为"winston": "2.*",然后在命令行中输入了该命令npm install -save winston

答案 4 :(得分:0)

winston.configure({transports: [new winston.transports.File({ filename: 'logfile.log' }) ]});

这对我有用。希望对你也有帮助。