脚手架开发工具——npmlog

简介

npmlog 是 npm 官方的日志工具,支持高度定制化,包括日志级别、输出格式、前缀、颜色、自定义日志类型、文件输出等。

调整日志级别(过滤输出)

npmlog 内置 7 个日志级别(优先级从高到低):silenterrorwarninfoverbosedebugsilly 通过 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:文字样式
  1. 自定义内置级别样式
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', '自定义样式的信息日志');
  1. 新增自定义日志级别 如果内置级别不够,可扩展自定义级别(如 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 属性重定向到文件 / 其他流:

  1. 输出到文件
js 复制代码
const fs = require('fs');
// 追加模式打开文件流
const logFile = fs.createWriteStream('./app.log', { flags: 'a' });
log.stream = logFile; // 重定向所有日志到文件

// 测试:日志会写入 app.log,不再输出到终端
log.info('file', '日志写入文件');
  1. 同时输出到终端和文件
js 复制代码
// 自定义流:同时写入 stderr 和文件
const dualStream = {
  write: function (message) {
    process.stderr.write(message); // 终端输出
    fs.appendFileSync('./app.log', message); // 文件追加
  }
};

log.stream = dualStream;
log.warn('dual', '同时输出到终端和文件');

其他实用定制

  1. 禁用颜色(适配无终端环境)
js 复制代码
log.enableColor(false); // 关闭颜色输出
log.error('no-color', '无颜色的错误日志');
  1. 自定义前缀分隔符
js 复制代码
log.headingSeparator = ' | '; // 全局前缀和自定义前缀之间的分隔符
log.heading = 'APP';
log.info('USER', '用户操作'); 
// 输出:APP | USER  用户操作(默认分隔符是空格)
  1. 清空日志缓存(如需手动控制输出)
js 复制代码
log.clear(); // 清空未输出的日志缓存
相关推荐
king王一帅14 小时前
Incremark Solid 版本上线:Vue/React/Svelte/Solid 四大框架,统一体验
前端·javascript·人工智能
智航GIS18 小时前
10.4 Selenium:Web 自动化测试框架
前端·python·selenium·测试工具
前端工作日常19 小时前
我学习到的A2UI概念
前端
徐同保19 小时前
为什么修改 .gitignore 后还能提交
前端
一只小bit19 小时前
Qt 常用控件详解:按钮类 / 显示类 / 输入类属性、信号与实战示例
前端·c++·qt·gui
Mr -老鬼20 小时前
前端静态路由与动态路由:全维度总结与实践指南
前端
颜酱20 小时前
前端必备动态规划的10道经典题目
前端·后端·算法
wen__xvn20 小时前
代码随想录算法训练营DAY10第五章 栈与队列part01
java·前端·算法
大怪v21 小时前
前端佬们!!AI大势已来,未来的上限取决你的独特气质!恭请批阅!!
前端·程序员·ai编程
Mr -老鬼1 天前
功能需求对前后端技术选型的横向建议
开发语言·前端·后端·前端框架