1

次のAPIとそれぞれのルートがあるとしましょう-

1) /api/v1/teachers - 教師の CRUD 操作用

2) /api/v1/students - 学生の CRUD 操作用

現在、両方の API リクエストのログを combined.log ファイルに保存しています。教師のCRUD操作のログをteachers.logファイルに、生徒のCRUD操作のログをstudents.logファイルに保存したいと考えています。

著者が特定の環境に基づいて特定のログを保存したいという次の質問を参照しました。

Winston/Node.jsは特定の環境にのみトランスポートを追加する方法は?

const winston = require('winston');
const transports = [
    new winston.transports.Console({
        level    : 'info',
        colorize : true
    }),
    new winston.transports.File({
        level    : 'info',
        filename : './logs/logs.log'
    })
];

if (process.env.NODE_ENV === 'production') {
    const Mail = require('winston-mail').Mail;

    transports.push(new Mail({
        to       : 'xxxxxx@xxxxxx.xx',
        from     : 'winston@xxxxx.xx',
        subject  : 'Errors occurred',
        level    : 'error',
        host     : 'smtp.xxxxx.xx',
        username : 'xxxx@xxxx.xx', 
        password : 'xxxxx',
        port     : 1234
    }));
}
const logger = new winston.Logger({
    transports
});

しかし、winston.js のリクエスト オブジェクト自体にアクセスできないため、ルートに基づいて条件を適用して、異なるルートのログを別のファイルに保存することはできません。

4

1 に答える 1

1

2 つのトランスポートを作成し、express-winstonを使用して、ルーターの前に指定されたトランスポートを選択できます。

var router = require('./teachers-router');

app.use(expressWinston.logger({
  transports: [
    new winston.transports.teachers, // you will need to create this one by your own
  ],
}));
app.use(router); 
于 2019-08-30T13:33:15.477 に答える