Node.js 日志级别(debug, info, warn, error)
日志级别控制日志输出的详细程度。
日志级别定义
级别层次
| 级别 | 数值 | 说明 | 适用场景 |
|---|---|---|---|
| trace | 0 | 最详细 | 开发调试、追踪流程 |
| debug | 1 | 调试信息 | 开发环境、排错 |
| info | 2 | 一般信息 | 关键事件、状态变化 |
| warn | 3 | 警告 | 潜在问题、异常情况 |
| error | 4 | 错误 | 错误事件、失败操作 |
| fatal | 5 | 严重错误 | 系统崩溃、致命问题 |
级别规则
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 支持动态调整级别
📝 发现内容有误?点击此处直接编辑