0

問題は、http によって呼び出されるコントローラー内のエクスポート関数からロガーを呼び出すと、ローカル戦略でのみ機能し、スラックとセントリーに通知されないことです。

ロガーのセットアップは次のようなものです。

サーバー.js

//...
winston = require('winston'),
Sentry = require('winston-sentry'),
slack = require('winston-slack').Slack,
winstonMongodb = require('winston-mongodb').MongoDB;

global.log = new (winston.Logger)({
    transports: [
        new (winston.transports.Console)({
            handleExceptions: true,
            prettyPrint: true,
            colorize: true,
        }),
        new (winston.transports.File)({ 
            filename: 'logs.log', 
            json: true,
            handleExceptions: true 
        }),
        new Sentry({
            dsn: "XXXXXXXXXXXXXXXXXXXXXXXXXX",
            patchGlobal: true,
        }),
        new slack({
            domain: "XXXXXXXXXXXXXXXXXXXXXXXXXX",
            apiToken: "XXXXXXXXXXXXXXXXXXXXXXXXXX",
            channel: "#XXXXXXXXXXXXXXXXXXXXXXXXXX",
            username: "XXXXXXXXXXXXXXXXXXXXXXXXXX",
            handleExceptions : true
        }),
        new(winston.transports.MongoDB)({
            dbUri: 'mongodb://XXXXXX:XXXXXXXX@XXXXXX.mongohq.com:XXXXXX/XXXXXX'
        })
    ],
}); 
//...

(グローバル変数を使用した例は見たことがありません。それが良い考えでない場合はお知らせください。ただし、このように、インポートすることなくすべてのファイルで機能します。)

テスト コントローラー:

test.js

//...
//called on server starts
log.info('test') //works with all transports

//called later by an HTTP request
exports.test = function(req, res, next){
    log.info('test') //only works with local transports (console and file)
}
//...
4

1 に答える 1