脚手架开发工具——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(); // 清空未输出的日志缓存
相关推荐
donecoding5 小时前
掌握 :focus-within,让你的AI对话输入体验更上一层楼!
前端·人工智能
快乐星球喂5 小时前
使用nrm管理镜像
前端
用户4099322502126 小时前
Vue3动态样式管理:如何混合class/style绑定、穿透scoped并优化性能?
前端·ai编程·trae
小徐不会敲代码~6 小时前
Vue3 学习2
前端·javascript·学习
m0_740043736 小时前
Vue2 语法糖简洁指南
前端·javascript·vue.js
天天向上10246 小时前
成功阻止chrome浏览器自动填充密码
服务器·前端·chrome
一水鉴天6 小时前
整体设计 定稿 之6 完整设计文档讨论及定稿 之1(豆包周助手)
java·前端·数据库
Java.熵减码农6 小时前
基于VueCli自定义创建项目
前端·javascript·vue.js