简介
npmlog 是 npm 官方的日志工具,支持高度定制化,包括日志级别、输出格式、前缀、颜色、自定义日志类型、文件输出等。
调整日志级别(过滤输出)
npmlog 内置 7 个日志级别(优先级从高到低):silent → error → warn → info → verbose → debug → silly 通过 level 属性设置当前生效级别,仅输出 ≥ 该级别的日志。
js
const log = require('npmlog');
// 基础配置:设置日志级别(默认 info)
log.level = 'verbose'; // 此时 error/warn/info/verbose 会输出,debug/silly 被过滤
// log.level = 'silent'; // 关闭所有日志输出
// 测试不同级别
log.error('err', '错误信息'); // 始终输出(级别最高)
log.warn('warn', '警告信息'); // 输出
log.info('info', '普通信息'); // 输出
log.verbose('verb', '详细信息');// 输出(因 level=verbose)
log.debug('debug', '调试信息'); // 不输出
log.silly('silly', '冗余信息'); // 不输出
定制日志样式(颜色 / 格式)
npmlog 基于 ansi-styles 支持终端颜色 / 样式定制,可配置:
fg:前景色(black/red/green/yellow/blue/magenta/cyan/white/gray)bg:背景色(同上,加Bg前缀,如bgRed)bold/italic/underline/strikethrough:文字样式
- 自定义内置级别样式
js
// 重写 error 级别的样式(红色背景+白色加粗)
log.levels.error = {
color: 'white',
bg: 'red',
bold: true,
level: 0 // 优先级(0 最高,数字越大优先级越低)
};
// 重写 info 级别的样式(绿色前景+加粗)
log.levels.info = {
color: 'green',
bold: true,
level: 2
};
log.error('err', '自定义样式的错误日志');
log.info('info', '自定义样式的信息日志');
- 新增自定义日志级别 如果内置级别不够,可扩展自定义级别(如
success/trace):
js
// 步骤1:添加自定义级别(指定优先级和样式)
log.addLevel('success', 2, { fg: 'green', bold: true }); // 优先级和 info 相同(2)
log.addLevel('trace', 4, { fg: 'gray', italic: true }); // 优先级低于 verbose(3)
// 步骤2:使用自定义级别
log.success('ok', '操作成功!');
log.trace('trace', '追踪日志...');
定制输出格式(自定义日志模板)
通过 format 方法自定义日志的输出模板,支持以下占位符:
%l:日志级别(如 info/error)%p:前缀(heading + 自定义前缀)%m:日志消息%t:时间戳
js
// 自定义输出格式:[时间] [级别] [前缀] 消息
log.format = function (level, prefix, message) {
const time = new Date().toLocaleTimeString(); // 本地时间
return `[${time}] [${level.toUpperCase()}] [${prefix}] ${message}`;
};
log.info('USER', '用户登录成功');
// 输出示例:[14:25:30] [INFO] [MY_APP USER] 用户登录成功
重定向输出(文件 / 自定义流)
默认日志输出到 process.stderr,可通过 stream 属性重定向到文件 / 其他流:
- 输出到文件
js
const fs = require('fs');
// 追加模式打开文件流
const logFile = fs.createWriteStream('./app.log', { flags: 'a' });
log.stream = logFile; // 重定向所有日志到文件
// 测试:日志会写入 app.log,不再输出到终端
log.info('file', '日志写入文件');
- 同时输出到终端和文件
js
// 自定义流:同时写入 stderr 和文件
const dualStream = {
write: function (message) {
process.stderr.write(message); // 终端输出
fs.appendFileSync('./app.log', message); // 文件追加
}
};
log.stream = dualStream;
log.warn('dual', '同时输出到终端和文件');
其他实用定制
- 禁用颜色(适配无终端环境)
js
log.enableColor(false); // 关闭颜色输出
log.error('no-color', '无颜色的错误日志');
- 自定义前缀分隔符
js
log.headingSeparator = ' | '; // 全局前缀和自定义前缀之间的分隔符
log.heading = 'APP';
log.info('USER', '用户操作');
// 输出:APP | USER 用户操作(默认分隔符是空格)
- 清空日志缓存(如需手动控制输出)
js
log.clear(); // 清空未输出的日志缓存