全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-15 6 分钟 ✍️ juanwangdev

Node.js 日志级别(debug, info, warn, error)

日志级别控制日志输出的详细程度。

日志级别定义

级别层次

级别数值说明适用场景
trace0最详细开发调试、追踪流程
debug1调试信息开发环境、排错
info2一般信息关键事件、状态变化
warn3警告潜在问题、异常情况
error4错误错误事件、失败操作
fatal5严重错误系统崩溃、致命问题

级别规则

JavaScript
// 设置日志级别后,只输出 >= 该级别的日志
// 设置 info 级别:输出 info/warn/error/fatal
// 设置 warn 级别:输出 warn/error/fatal
// 设置 error 级别:只输出 error/fatal

Winston 日志级别

安装

Bash
npm install winston

配置级别

JavaScript
const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',  // 设置最低输出级别
  levels: winston.config.npm.levels,
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'combined.log' }),
    new winston.transports.File({
      filename: 'error.log',
      level: 'error'  // 只记录 error 级别
    })
  ]
});

// 使用各级别
logger.trace('追踪信息');  // 不输出(低于 info)
logger.debug('调试信息');  // 不输出(低于 info)
logger.info('一般信息');   // 输出
logger.warn('警告信息');   // 输出
logger.error('错误信息');  // 输出

动态调整级别

JavaScript
// 运行时修改级别
logger.level = 'debug';  // 开启调试日志
logger.level = 'warn';   // 只记录警告和错误

// 根据环境设置
logger.level = process.env.LOG_LEVEL || 'info';
logger.level = process.env.NODE_ENV === 'development' ? 'debug' : 'info';

Pino 日志级别

安装

Bash
npm install pino

使用

JavaScript
const pino = require('pino');

const logger = pino({
  level: 'info'
});

logger.trace('追踪');
logger.debug('调试');
logger.info('信息');
logger.warn('警告');
logger.error('错误');
logger.fatal('致命');

Pino 美化输出

JavaScript
const logger = pino({
  level: 'debug',
  transport: {
    target: 'pino-pretty',
    options: {
      colorize: true,
      translateTime: 'SYS:standard',
      ignore: 'pid,hostname'
    }
  }
});

级别使用指南

trace 级别

JavaScript
// 最详细,记录每一步
logger.trace('进入函数 processData');
logger.trace('参数: %j', params);
logger.trace('步骤1: 验证输入');
logger.trace('步骤2: 处理数据');
logger.trace('步骤3: 返回结果');

debug 级别

JavaScript
// 开发调试用,记录关键变量值
logger.debug('用户ID: %s', userId);
logger.debug('查询参数: %j', queryParams);
logger.debug('响应数据: %j', response);
logger.debug('处理耗时: %d ms', duration);

info 级别

JavaScript
// 生产环境常用,记录重要事件
logger.info('服务启动,端口: %d', port);
logger.info('用户登录: %s', userId);
logger.info('请求处理完成: %s %s', method, path);
logger.info('数据库连接成功');

warn 级别

JavaScript
// 潜在问题,需要关注
logger.warn('内存使用超过 80%');
logger.warn('请求耗时超过阈值: %d ms', duration);
logger.warn('配置项缺失,使用默认值');
logger.warn('API 响应缓慢: %s', endpoint);

error 级别

JavaScript
// 错误事件,必须记录
logger.error('数据库连接失败: %s', err.message);
logger.error('请求处理失败: %s', err.stack);
logger.error('文件读取错误: %s', path);

fatal 级别

JavaScript
// 致命错误,进程即将退出
logger.fatal('内存溢出,进程终止');
logger.fatal('关键服务崩溃');

环境级别配置

开发环境

JavaScript
const logger = winston.createLogger({
  level: 'debug',  // 开发用 debug
  transports: [
    new winston.transports.Console({
      format: winston.format.combine(
        winston.format.colorize(),
        winston.format.simple()
      )
    })
  ]
});

生产环境

JavaScript
const logger = winston.createLogger({
  level: 'info',  // 生产用 info
  transports: [
    new winston.transports.File({
      filename: 'logs/error.log',
      level: 'error'
    }),
    new winston.transports.File({
      filename: 'logs/combined.log'
    })
  ]
});

测试环境

JavaScript
const logger = winston.createLogger({
  level: 'warn',  // 测试用 warn,减少输出
  transports: [
    new winston.transports.Console()
  ]
});

多传输器不同级别

JavaScript
const logger = winston.createLogger({
  transports: [
    // 控制台显示所有 info 以上
    new winston.transports.Console({ level: 'info' }),

    // 文件记录所有 debug 以上
    new winston.transports.File({
      filename: 'debug.log',
      level: 'debug'
    }),

    // 错误文件只记录 error
    new winston.transports.File({
      filename: 'error.log',
      level: 'error'
    })
  ]
});

注意事项

  • 开发环境用 debug/trace 级别
  • 生产环境用 info/warn 级别
  • error 级别必须记录堆栈
  • 不要在日志中记录敏感信息
  • 设置合理的日志保留策略

要点总结

  • 级别从低到高:trace → debug → info → warn → error → fatal
  • 设置级别后只输出 >= 该级别的日志
  • 开发环境用 debug,生产环境用 info
  • error 必须记录详细信息便于排查
  • Winston/Pino 支持动态调整级别

📝 发现内容有误?点击此处直接编辑

← 上一篇 Node.js 异步错误处理(回调、Promise、async/await)
下一篇 → Node.js 日志记录基础(console)
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库