无效传输,必须是具有日志方法winston mongodb日志记录的对象

gcxthw6b  于 2023-06-05  发布在  Go
关注(0)|答案(8)|浏览(451)

我想将我的错误日志存储在mongoDB集合中。我使用的是winston & winston -mongoDB。
获取错误:
throw new Error('Invalid transport,must be an object with a log method.');错误:无效传输,必须是具有日志方法的对象。
下面是logger文件中的代码。下面是我的代码:从'app-root-path'导入appRoot; import { createLogger,transports,format,} from 'winston';

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
r8uurelv

r8uurelv1#

我也遇到了同样的问题,我所做的就是替换这句话:

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

对此:

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

这发生在winston的最新主要更新中,即3.x.x及以上版本。
希望这有帮助!

zaq34kh6

zaq34kh62#

更新答案:

您需要在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!")

希望这能解决你的疑问!

fcwjkofz

fcwjkofz3#

这是目前最新的版本。
“mongoose”:“^5.11.10”,“winston”:“^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" })
);
rdlzhqv9

rdlzhqv94#

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

de90aj5v

de90aj5v5#

winston.configure({transports: [new winston.transports.File({ filename: 'logfile.log' }) ]});
这对我很有效。希望对你也有帮助。

z3yyvxxp

z3yyvxxp6#

我也在学习nodeJS,发生了这个winston日志记录问题。因此,之前提出的解决方案得到了再次确认,并且效果良好。
我所做的改变是从

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

收件人:

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

我的软件包版本如下:

{
    "@hapi/joi": "^17.1.1",
    "bcrypt": "^5.0.1",
    "config": "^3.3.7",
    "express": "^4.17.3",
    "express-async-errors": "^3.1.1",
    "fawn": "^2.1.5",
    "font": "^0.0.4",
    "joi-objectid": "^4.0.2",
    "jsonwebtoken": "^8.5.1",
    "lodash": "^4.17.21",
    "mongoose": "^6.2.8",
    "pug": "^3.0.2",
    "winston": "^3.6.0"
}
y1aodyip

y1aodyip7#

如果我换掉了

<br>
   winston.add(azureApplicationInsightsLogger, {....<br>
with :<br>
   winston.add(new azureApplicationInsightsLogger(), {...<br>
and <br>
   winston.add(winston.transports.Console, {...<br>
with : <br>
   winston.add(new winston.transports.Console(), {...
mwecs4sa

mwecs4sa8#

遇到了同样的问题以下是我的工作,在package.json中,将winston版本设置为
“winston”:“^2.4.7”,“winston-mongodb”:“^5.1.1”

相关问题