node.js - Winston/Node.js 如何仅为特定路线添加运输?

标签 node.js express winston morgan

假设我有以下 API 及其各自的路线,如下 -

1)/api/v1/teachers - 用于教师的CRUD操作

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

目前,我将两个 API 请求的日志存储在组合的.log 文件中。我想将教师的CRUD操作日志存储在teacher.log文件中,将学生的CRUD操作日志存储在students.log文件中。

我提到了以下问题,其中作者希望根据特定环境存储特定日志。

Winston/Node.js how add a Transport only for certain environment?

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中的请求对象本身,因此我无法应用基于条件的路由来将不同路由的日志存储在不同的文件中。

最佳答案

您可以创建 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); 

关于node.js - Winston/Node.js 如何仅为特定路线添加运输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57727561/

相关文章:

node.js - 弹性 beantalk 上的 npm 全局安装

javascript - 如何使用 node.js 创建用户模型?

javascript - 时间戳1小时内的Mongo Node查询

javascript - 如何在 express.js 中抛出 404 错误?

node.js - 在Node js中使用fs读取json文件时出错

node.js - 如何使用express api获取Mongoose中创建的对象的返回

mysql - 如何在 Node.js 中使用 winston 将日志存储到 mysql 数据库中

angularjs - 在 angularjs 应用程序中使用 winston.js

reactjs - 在React中使用axios从内连接表获取数据时出现问题

node.js - 使用docker时Winston日志文件在哪里