web-dev-qa-db-ja.com

無効なトランスポート。ログメソッドwinstonmongodbloggingのオブジェクトである必要があります

エラーログを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]
5

私は同じ問題を抱えていました、私がしたことはこのステートメントを置き換えることでした:

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

これに:

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

これは、winstonの最新のメジャーアップデート(3.x.x以降)で発生します。

お役に立てれば!

15
Harsh

更新された回答:

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!")

これがあなたの質問を解決することを願っています!

2
Harshal

私も同様の問題を抱えていたので、package.json"winston": "^3.0.0"から"winston": "2.*"に変更し、コマンドラインにこのコマンドnpm install -save winstonを入力しました。

0
studentfromSLU