typescript 为每个请求创建一个新的Winston日志记录器示例

pxiryf3j  于 2023-04-22  发布在  TypeScript
关注(0)|答案(1)|浏览(139)

我想在中间件中设置的每个nodejs/express请求上创建一个新的Winston logger示例。这是因为我想在每个示例上保存userId,以便在日志中填充,而不必每次都显式设置。

const myMiddleware = async (req: Request, res: Response, next: NextFunction) => {
     req.logger = winston.createLogger({
   level: 'info',
   format: winston.format.json(),
   defaultMeta: { service: 'user-service', userId: req.headers['userId'] },
});

     next();
};

这是一个不好的做法吗?内存消耗如何?假设你每秒有数千个请求,这会是一个内存问题吗?

juzqafwq

juzqafwq1#

@spyrAlex我正在考虑这样的事情

const winston = require('winston');

// Create a new Winston logger instance with default options
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json()
});

const myMiddleware = async (req, res, next) => {
  // Add default data to the request object
  req.loggerData = { service: 'user-service', userId: req.headers['userId'] };
  next();
};

app.get('/', (req, res) => {
  // Log a message with the default data for this request
  logger.log({
    level: 'info',
    message: 'Hello, world!',
    ...req.loggerData
  });
  res.send('Hello, world!');
});

相关问题