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

Posted

技术标签:

【中文标题】无效的传输,必须是带有日志方法的对象 winston mongodb logging【英文标题】:Invalid transport, must be an object with a log method winston mongodb logging 【发布时间】:2019-01-13 02:09:28 【问题描述】:

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

得到错误:

throw new Error('无效传输,必须是带日志的对象 方法。');错误:传输无效,必须是带有日志的对象 方法。

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

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

【问题讨论】:

【参考方案1】:

我有同样的问题,我所做的就是替换这个语句:

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

到这里:

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

这发生在 winston 的最新主要更新中,即 3.x.x 及更高版本。

希望这会有所帮助!

【讨论】:

我确认,这对我有帮助。像往常一样,升级到新版本的库时,api 中的无用更改会破坏整个应用程序。 我正是考虑到这一点,您的回答在这里证实了这一点。是的,这工作得很好,除了我在终端中没有看到任何东西,虽然得到了日志文件。谢谢【参考方案2】:

更新答案:

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

希望这能解决您的问题!

【讨论】:

嗨,杰克,控制台和文件传输工作正常。我的问题在于 mongodb 传输,即记录到 mongodb 集合。 好的,让我检查一下。 @saurabhujjainwal 我已经更新了我的答案,请检查。 谢谢。您还可以帮助将元数据记录到 mongoDb 吗? @saurabhujjainwal,如果它解决了您的问题,您能否批准答案。【参考方案3】:

这是目前最新的版本。

"猫鼬": "^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" )
);

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

以上是关于无效的传输,必须是带有日志方法的对象 winston mongodb logging的主要内容,如果未能解决你的问题,请参考以下文章

消息:无效的 JSON 原语:带有 Webmethod 的 ajax jquery 方法

错误:对象作为 React 子项无效(找到:带有键 的对象)。改用数组

错误:对象作为 React 子对象无效(找到:带有键 low, high 的对象)

SQL新建查询时,表名没错,为啥说对象名无效

对象作为 React Child 无效(找到:带有键 id,name 的对象)

邮件传输协议的SMTP命令