温馨提示×

Ubuntu JS日志级别怎么设置

小樊
57
2025-09-24 16:21:53
栏目: 编程语言

Ubuntu下设置JavaScript(Node.js)日志级别的常见方法

在Ubuntu系统中,JavaScript应用程序(尤其是Node.js)的日志级别设置主要依赖第三方日志库(如winston、morgan、log4js等),以下是具体实现方式:

1. 使用Winston设置日志级别

Winston是Node.js最流行的日志库之一,支持多传输(控制台、文件等)和灵活的日志级别配置。
步骤

  • 安装winston:npm install winston
  • 初始化logger并设置级别:
    const winston = require('winston');
    const logger = winston.createLogger({
      level: 'info', // 核心配置:设置日志级别(可选:error、warn、info、debug、verbose等)
      format: winston.format.combine(
        winston.format.timestamp(),
        winston.format.printf(({ timestamp, level, message }) => `${timestamp} [${level}]: ${message}`)
      ),
      transports: [
        new winston.transports.Console(), // 输出到控制台
        new winston.transports.File({ filename: 'error.log', level: 'error' }), // 仅记录error级别到文件
        new winston.transports.File({ filename: 'combined.log' }) // 记录所有级别到文件
      ]
    });
    
    // 测试日志输出
    logger.debug('Debug信息(不会显示,因级别为info)');
    logger.info('Info信息(会显示)');
    logger.error('Error信息(会显示)');
    
    说明level参数决定了日志的最低输出级别,高于该级别的日志会被记录(如level: 'info'会记录info、warn、error级别的日志)。

2. 使用Morgan设置Express.js日志级别

Morgan是Express.js的HTTP请求日志中间件,常用于记录请求详情。
步骤

  • 安装morgan:npm install morgan
  • 在Express应用中配置日志级别:
    const express = require('express');
    const morgan = require('morgan');
    const app = express();
    
    // 常用预设级别:'combined'(详细)、'common'(简洁)、'dev'(开发环境,彩色输出)、'tiny'(最小化)
    app.use(morgan('dev')); // 设置日志级别为dev
    
    // 自定义日志格式(可选)
    app.use(morgan(':method :url :status :response-time ms - :res[content-length]')); 
    
    app.get('/', (req, res) => res.send('Hello World'));
    app.listen(3000, () => console.log('Server running on port 3000'));
    
    说明:Morgan通过预设字符串控制日志级别,dev级别会显示请求方法、URL、状态码、响应时间等详细信息,tiny仅显示基本请求信息。

3. 使用Log4js设置日志级别

Log4js是类似Java Log4j的Node.js日志库,支持配置文件和多appender(输出目标)。
步骤

  • 安装log4js:npm install log4js
  • 创建配置文件log4js-config.json
    {
      "appenders": {
        "console": { "type": "console" },
        "file": { "type": "file", "filename": "app.log" },
        "errorFile": { "type": "file", "filename": "error.log" }
      },
      "categories": {
        "default": { "appenders": ["console", "file"], "level": "info" }, // 默认级别为info
        "error": { "appenders": ["errorFile"], "level": "error" } // error类别仅记录error级别
      }
    }
    
  • 在应用中加载配置:
    const log4js = require('log4js');
    log4js.configure('./log4js-config.json');
    const logger = log4js.getLogger(); // 获取默认logger(级别为info)
    const errorLogger = log4js.getLogger('error'); // 获取error类别logger(级别为error)
    
    logger.info('Info信息(会输出到console和file)');
    errorLogger.error('Error信息(会输出到errorFile)');
    
    说明:通过categories配置不同类别的日志级别,default为全局默认级别,可针对特定模块(如error)设置更严格的级别。

4. 通过环境变量动态设置日志级别

为了灵活调整日志级别(如开发环境用debug,生产环境用info),可通过环境变量控制。
步骤

  • 安装dotenv(用于加载.env文件):npm install dotenv
  • 创建.env文件:
    LOG_LEVEL=debug
    
  • 在代码中读取环境变量并设置:
    require('dotenv').config();
    const winston = require('winston');
    const logger = winston.createLogger({
      level: process.env.LOG_LEVEL || 'info', // 优先使用环境变量,未设置则默认为info
      format: winston.format.json(),
      transports: [new winston.transports.Console()]
    });
    
    logger.debug('Debug信息(仅在LOG_LEVEL=debug时显示)');
    
    说明:通过process.env.LOG_LEVEL读取环境变量,适合需要频繁切换日志级别的场景(如Docker部署时通过-e LOG_LEVEL=debug传递参数)。

注意事项

  • 日志级别的优先级:error > warn > info > debug > verbose(不同库可能略有差异)。
  • 生产环境建议将日志级别设置为infowarn,避免过多调试信息影响性能;开发环境可设置为debug以获取详细信息。
  • 结合日志轮转工具(如logrotate)可自动管理日志文件大小和保留时间,防止磁盘空间耗尽。

0