MST

星途 面试题库

面试题:Node.js日志管理之高级难度:日志格式定制与多环境处理

在Node.js项目中,要求在开发环境中日志格式为方便调试的详细格式,在生产环境中为简洁的标准格式。请使用winston库,实现这种多环境不同日志格式的配置,并说明如何在不同环境下灵活切换。
33.4万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
  1. 安装winston: 在项目目录下运行npm install winston
  2. 配置不同环境的日志格式: 创建一个日志配置文件,例如logger.js
    const winston = require('winston');
    const { format } = winston;
    const { combine, timestamp, printf } = format;
    
    // 开发环境详细格式
    const devFormat = combine(
      timestamp({
        format: 'YYYY-MM-DD HH:mm:ss'
      }),
      printf(({ level, message, timestamp }) => {
        return `${timestamp} [${level}]: ${message}`;
      })
    );
    
    // 生产环境简洁格式
    const prodFormat = printf(({ level, message }) => {
      return `${level}: ${message}`;
    });
    
    const logger = winston.createLogger({
      level: 'info',
      transports: [
        new winston.transport.Console()
      ]
    });
    
    if (process.env.NODE_ENV === 'development') {
      logger.transports[0].format = devFormat;
    } else {
      logger.transports[0].format = prodFormat;
    }
    
    module.exports = logger;
    
  3. 在不同环境下灵活切换
    • 开发环境: 在开发环境中,确保NODE_ENV环境变量设置为development。在Linux或macOS系统中,可以在启动命令前设置,如NODE_ENV=development node app.js。在Windows系统中,可以使用set NODE_ENV=development && node app.js。这样logger.js中的逻辑会检测到NODE_ENVdevelopment,从而使用开发环境的详细日志格式。
    • 生产环境: 在生产环境中,将NODE_ENV环境变量设置为production。部署时可以在服务器的环境变量设置中配置NODE_ENV=productionlogger.js中的逻辑会检测到NODE_ENVproduction,从而使用生产环境的简洁日志格式。

在项目的其他文件中,引入该logger模块即可使用相应环境的日志格式,例如:

const logger = require('./logger.js');
logger.info('This is an info log');