在前端开发中,调试日志是一个非常重要的话题。对于只有几行代码的小项目来说,console.log 可能已经足够。但对于更大型更复杂的项目来说,需要一个功能更强大的工具来帮助我们管理日志输出。一款非常不错的工具是 npm 包 nightingale。
Nightingale 是什么?
Nightingale 是一个针对浏览器和 Node.js 环境的小型日志记录器,有以下特点:
- 可自定义日志处理器和输出器。
- 可支持多种日志级别,如 debug、info、warn、error 等。
- 可使用占位符来格式化输出内容。
- 管理输出时支持过滤器,可基于命名空间、日志级别和时间戳来过滤日志记录。
- 支持颜色化输出。
- 兼容 TypeScript 语法
Nightingale 的安装
首先,我们需要确保在项目中已安装了 npm 包管理器。然后,通过以下命令来安装 Nightingale:
npm install nightingale
Nightingale 的使用方法
1. 创建日志记录器
通过以下代码,我们可以创建一个日志记录器:
import { Logger } from 'nightingale'; const logger = new Logger('namespace');
这里,我们使用了 ES6 模块方式导入 nightingale,并新建了一个名为 logger 的日志记录器。传入的参数 namespace 是指定该日志记录器的命名空间。
在创建日志记录器之后,我们可以使用以下代码记录日志:
logger.debug('debug message'); logger.info('info message'); logger.warn('warning message'); logger.error('error message');
每个方法名对应了不同的日志级别。想要记录什么日志级别的信息就使用什么方法。
2. 自定义处理器和输出器
我们可以使用以下代码来创建自定义的处理器来处理记录器的日志输出:
-- -------------------- ---- ------- ------ - ------- - ---- -------------- ----- ------------- ------- ------- - ------------- - -------- - -------------- - -- ---------- - -
这样,我们就可以使用 CustomHandler 处理或过滤相关的日志输出了。
想要记录器的日志信息输出到发送到服务端的某个接口,我们可以创建自定义输出器:
-- -------------------- ---- ------- ------ - --------------- ------- ---------------- - ---- -------------- ----- -------------------- ------- -------------- - ------------- - -------- - ---------------- - ------ ------- - -------------- ------- - ------ - -------- --------------- ------ - ------ ------------- ---------- --------------- -------- --------------- ----- --- ---------------- --------------- -- -- - ----------------------------- ------- - ------------------------------------ -- ---- ---- -- ---- --- --- -- ------ - - -------------------- ----------------------- -------------
在这里,我们添加了一个自定义的 ConsoleHandler 的子类,为了在 logFormatted 方法中可以与后端交互,加入相应的处理代码,比如以使用 fetch 的方式,发送到一个日志上报接口。
在使用 CustomConsoleHandler 时,我们可以添加全局处理方法:
addGlobalHandler(new CustomConsoleHandler(), levels.INFO);
这里别忘了设置日志级别!否则输出会非常冗长。
3. 使用占位符来格式化输出内容
在 nightingale 中,我们可以使用占位符来格式化输出内容,示例如下:
logger.info('这是一个带有 %s 和 %d 的日志记录', '字符串', 123);
输出的日志将会是:
这是一个带有字符串和 123 的日志记录
4. 带有命名空间的日志记录器
在使用 nightingale 时,一般会针对不同的功能点在代码中创建不同的记录器。通过使用“.”号来分隔命名空间,我们就可以方便地根据不同的业务功能点来分类管理日志:
const logger1 = new Logger('namespace1'); const logger2 = new Logger('namespace2'); const logger3 = new Logger('namespace3.subnamespace');
在记录日志时,我们可以使用类似这样的语句:
logger3.info('日志输出');
我们会看到输出的日志信息是类似这样的:
namespace3.subnamespace:a1234567:日志输出
这里的“a1234567”是日志的唯一 ID ,可用于追溯问题。
5. 日志过滤器
在使用 nightingale 的过程中,我们可以使用过滤器来针对特定的日志记录器做出过滤。例如,可以只输出特定命名空间的日志,或仅输出特定级别的日志。以下是使用过滤器的示例:
import browserConsole from 'nightingale-browser-console'; Logger.setLevel('subnamespace', levels.ERROR); addHandler(browserConsole, levels.INFO, (record) => record.channel !== 'subnamespace'); logger1.info('输出1'); // 输出1 logger2.info('输出2'); // 输出2 logger3.info('输出3'); // 没有输出
在上面的代码中,我们使用 setLevel 方法来指定 'subnamespace' 命名空间的日志输出级别。然后,我们使用 addHandler 方法,来添加一个名为 browserConsole 的输出器,其处理级别设置为 levels.INFO,并指定了一个过滤器函数,用于过滤掉命名空间为 'subnamespace' 的记录。
6. 兼容 TypeScript 语法
Nightingale 兼容 TypeScript,可以使用 TypeScript 的语法特性,比如:
const logger = new Logger('namespace'); interface Context { } logger.info({ foo: 'bar' }, 'context');
示例代码
-- -------------------- ---- ------- ------ - --------------- ------- ----------- ----------------- ------ - ---- -------------- ------ -------------- ---- ------------------------------ ----- -------------------- ------- -------------- - ----------------------------- - ------------------------------------ -- ---- ---- -- ---- --- --- -- ------ - - ----- ------------- - -------------- - ------------------- --------- -------- - - ----- ------- - --- --------------------- ----- ------- - --- --------------------- ----- ------- - --- ---------------------------------- -------------- ---------------- -------------- -------------------- ----------------------- ------------- --------------------------- ----------- --------------- ------------ -------- -- -------------- --- -------------- -- ------------------------------- -------------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- ------------------ ----------- ------------------ ----------- ------------------ ----------- ------------------ ----------- ------------------ ----------- ------------------ ----------- ------------------ ----------- ------------------ ----------- ------------------ ----------- --------------------- ----------- --------------------- ----------- --------------------- ----------- --------------------- ----------- --------------------- ----------- --------------------- ----------- --------------------- ----------- --------------------- ----------- --------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- -----------
总结
这篇文章介绍了 npm 包 nightingale 的功能,以及怎样在项目中使用它来记录日志。使用 nightingale,我们可以自定义记录器和处理器,设置不同的日志级别,使用占位符来格式化日志信息,以及使用过滤器来过滤日志信息输出。同时它也支持 TypeScript 语法,可以让我们更好地在 TypeScript 项目中使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/69361