エラーログをmongoDBコレクションに保存したい。私はwinstonとwinston-mongoDBを使用しています。
エラーの取得:
throw new Error( '無効なトランスポート、logメソッドを持つオブジェクトである必要があります。');エラー:無効なトランスポート。logメソッドを持つオブジェクトである必要があります。
これがロガーファイルのコードです。これが私のコードです:import appRoot from'app-root-path '; 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",
[email protected]
私は同じ問題を抱えていました、私がしたことはこのステートメントを置き換えることでした:
winston.add(winston.transports.File, { filename: 'logfile.log' });
これに:
winston.add(new winston.transports.File({ filename: 'logfile.log' }));
これは、winstonの最新のメジャーアップデート(3.x.x以降)で発生します。
お役に立てれば!
Winstonの初期化でmongoトランスポートを追加する必要があります。
このコードを試してください:
const logger = winston.createLogger({
transports: [
new winston.transports.MongoDB({
db: 'mongodb://localhost:27017/test',
collection: 'log',
level: 'info',
storeHost: true,
capped: true,
})
]
});
テストDBのログコレクションを確認してください。
あなたが持っていることを確認してください:
logger.info("Test log!")
これがあなたの質問を解決することを願っています!
私も同様の問題を抱えていたので、package.json
を"winston": "^3.0.0"
から"winston": "2.*"
に変更し、コマンドラインにこのコマンドnpm install -save winston
を入力しました。