脚手架开发工具——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(); // 清空未输出的日志缓存
相关推荐
m0_7482299918 小时前
Vue2 vs Vue3:核心差异全解析
前端·javascript·vue.js
C澒19 小时前
前端监控系统的最佳实践
前端·安全·运维开发
xiaoxue..19 小时前
React 手写实现的 KeepAlive 组件
前端·javascript·react.js·面试
hhy_smile19 小时前
Class in Python
java·前端·python
小邓吖19 小时前
自己做了一个工具网站
前端·分布式·后端·中间件·架构·golang
南风知我意95719 小时前
【前端面试2】基础面试(杂项)
前端·面试·职场和发展
LJianK120 小时前
BUG: Uncaught Error: [DecimalError] Invalid argument: .0
前端
No Silver Bullet20 小时前
Nginx 内存不足对Web 应用的影响分析
运维·前端·nginx
一起养小猫20 小时前
Flutter for OpenHarmony 实战 表单处理与验证完整指南
android·开发语言·前端·javascript·flutter·harmonyos
weixin_3954489120 小时前
main.c_cursor_0130
前端·网络·算法