无效的传输,必须是带有日志方法的对象 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 的对象)