diagnostics
分发和维修
达格·哈马舍尔德图书馆 分配和维护 DABH 有限责任公司。 。 。 . 维修和软件咨询查询: 哈啰@dabh.llc。 。 。 .
这一分布基于Arnout Kazemier的诊断,Martijn Swaagman, 及其贡献者。 原版权通知和麻省理工学院许可证为: 保存在 自由主义。 。 。 .
在节点.js核心中使用的调试模式演变中的诊断,
这种极其小而强大的技术最好比作特色
标记为伐木工。 默认已禁用已创建的调试日志, 但可以
启用时不更改代码行,使用旗帜.
- 允许在多个 JavaScript 环境中进行调试, 如节点.js, 浏览器 和反应 - Native.
- 分开开发与生产,以尽量减少对您的影响 捆绑时应用.
- 允许定制日志、信件和更多信息.

安装
模块发布于公共npm注册,可以安装于 运行中 :
npm install --save @dabh/diagnostics
使用量
导言
简单地创建一个新的日志 require 页:1 @dabh/diagnostics 模块和调用
返回函数。 它接受两个论点:
namespace需求 这是您的日志的命名空间 所以我们知道是否有必要 在使用调试旗时启用您的日志。 通常您使用名称为 您的库或应用程序作为第一个根命名空间。 比如说,如果你是 在库中建立解析器( 例如) 您可以设置命名空间example:parser。 。 。 .options对日志附加配置的对象 . 识别以下密钥:force强制启用日志机 .colors默认启用日志的颜色, 但您可以设置此功能 选项到false来禁用它.
const debug = require('@dabh/diagnostics')('foo:bar:baz');
const debug = require('@dabh/diagnostics')('foo:bar:baz', { options });
debug('this is a log message %s', 'that will only show up when enabled');
debug('that is pretty neat', { log: 'more', data: 1337 });
与 console.log 在开发过程中添加或删除的语句
使用寿命周期后,您会创建有意义的日志语句,使您深入了解
您正在开发的库或应用程序 .
创建的调试器使用不同的"适应器"来提取调试旗 出自JavaScript环境. 学习如何启用调试旗 在您的特定环境中,单击下面启用的适配器.
请注意,返回的日志已全部配置出框, 您 不需要设置任何适配器/修饰器 当您想要对进程进行更先进的控制时。 但如果你想的话 了解更多,阅读下一节.
高级用途
有两种具体的使用模式 diagnostic, 图书馆开发者
将它作为模块和应用程序开发者的一部分执行
在其应用程序中使用,或者正在寻找使用信件的方法.
使用在其中讨论的简单日志界面 导言 部分,我们让开发者很容易加入到他们的库中 应用、应用和应用 API 密码 我们允许无限定制 通过允许自定义适配器、记录器和修改器来确保此库 保持相关性。 这些方法不仅允许引入新的伐木机, 但让你在盒子外思考 例如,您可以保存历史 ,并输出未发现的例外情形 您的应用程序所以您有额外的上下文
const diagnostics = require('@dabh/diagnostics');
let index = 0;
const limit = 200;
const history = new Array(limit);
//
// Force all `diagnostic` loggers to be enabled.
//
diagnostics.force = process.env.NODE_ENV === 'prod';
diagnostics.set(function customLogger(meta, message) {
history[index]= { meta, message, now: Date.now() };
if (index++ === limit) index = 0;
//
// We're running a development build, so output.
//
if (meta.dev) console.log.apply(console, message);
});
process.on('uncaughtException', async function (err) {
await saveErrorToDisk(err, history);
process.exit(1);
});
上面的小片段将保留200个有限的FIFO(First In First Out) 当应用程序崩溃时可以引用的所有调试消息的队列
生产与发展
当你 require 页:1 @dabh/diagnostics 模块将给您一个日志
优化用于 development 这样它就能提供最好的开发者经验
也许吧.
开发记录器可以实现所有 适配器 送给你的
JavaScript 环境, 添加一个将信件输出到 console.log
并登记更改信件的功能,这样日志信件会与
提供命名空间, 以便您知道日志消息的来源 .
开发日志没有启用任何适配器、修改器和日志
默认。 这将确保您的日志信息不会意外出现于
生产。 不过这并不意味着无法调试
正在制作中的信息。 你们可以 force 要启用的调试器,以及
供应a 自定义日志。 。 。 .
const diagnostics = require('@dabh/diagnostics');
const debug = debug('foo:bar', { force: true });
//
// Or enable _every_ diagnostic instance:
//
diagnostics.force = true;
网络软件包
WebPack的概念是 模式是因为 生成不同的
module.exports = {
mode: 'development' // 'production'
}
当您使用 WebPack CLI 构建您的应用程序时, 您可以使用 --mode
旗帜 :
webpack --mode=production app.js -o /dist/bundle.js
节点.js
当你使用您的应用程序运行时 Node.js 你应该 NODE_ENV
环境变量改为 production 确保您的图书馆
为生产优化进口.
NODE_ENV=production node app.js
API 密码
返回的日志显示一些可用于 您的应用程序或库 :
启用
返回的日志将有一个 .enabled 分配给它的财产。 这个布尔
可用于检查是否启用了日志 :
const debug = require('@dabh/diagnostics')('foo:bar');
if (debug.enabled) {
//
// Do something special
//
}
该财产被曝光为:
- 在伐木机上的财产.
- 元/ 选项对象上的属性 .
名称空间
这是您最初为函数提供的命名空间 .
const debug = require('@dabh/diagnostics')('foo:bar');
console.log(debug.namespace); // foo:bar
该财产被曝光为:
- 在伐木机上的财产.
- 元/ 选项对象上的属性 .
. dev/prod (中文(简体) )
有不同的建筑物可用 diagnostics当你创建一个
使用 NODE_ENV=production 你会是
以最优化、较小的 diagnostics 以减小你的捆绑大小.
这个 dev 财务报告和审定财务报表 prod 返回日志上的布尔表示您是否有
生产或开发版的伐木机.
const debug = require('@dabh/diagnostics')('foo:bar');
if (debug.prod) {
// do stuff
}
该财产被曝光为:
- 在伐木机上的财产.
- 元/ 选项对象上的属性 .
设定
设置新日志为默认值 全部 diagnostic 实例。 通过了
参数应该是一个函数,将日志消息写到您曾经在哪里
想要吗? 它收到两个论点:
meta包含所有选项的对象 要写入日志信件的日志以及日志的属性 调试器, 如prod, (中文(简体) ),dev, (中文(简体) ),namespace, (中文(简体) ),enabled。见 API 密码 页:1 所有暴露的属性.args需要写入的日志信件数组 .
const debug = require('@dabh/diagnostics')('foo:more:namespaces');
debug.use(function logger(meta, args) {
console.log(meta);
console.debug(...args);
});
这种方法被曝光为:
- 在伐木机上的方法.
- 元/ 选项对象的方法 .
- 方法
diagnostics模块.
修改
修改方法允许您添加新信件修改器到 全部 diagnostic
实例。 通过的参数应该是一个函数,它会返回过去
修改后的消息。 该函数收到两个参数:
message数组,日志信息.options,对象,输入日志时的选项 最初创建.
const debug = require('@dabh/diagnostics')('example:modifiers');
debug.modify(function (message, options) {
return messages;
});
这种方法被曝光为:
- 在伐木机上的方法.
- 元/ 选项对象的方法 .
- 方法
diagnostics模块.
见 修改 更多信息.
使用情况
添加新内容 adapter 改为 全部 diagnostic 实例。 通过的论据
函数返回布尔,以显示是否通过
namespace 允许写入日志消息.
const diagnostics = require('@dabh/diagnostics');
const debug = diagnostics('foo:bar');
debug.use(function (namespace) {
return namespace === 'foo:bar';
});
这种方法被曝光为:
- 在伐木机上的方法.
- 元/ 选项对象的方法 .
- 方法
diagnostics模块.
见 适配器 更多信息.
修改器
尽可能灵活地改变我们的信息
提出一个概念: modifiers 可增强调试消息.
您可以引入您认为重要的功能或细节
对调试消息, 并且不需要我们添加额外的 bloat 到
diagnostic 核心键.
例如,您希望信件的前缀为日期 日志消息发生 :
const diagnostics = require('@dabh/diagnostics');
diagnostics.modify(function datetime(args, options) {
args.unshift(new Date());
return args;
});
现在所有信件都会被前缀为输出的日期 new Date()。 。 。 .
以下修改剂随同 diagnostics 并启用在
发展 仅模式 :
命名空间
为所有调试实例启用此修改符, 并预缀信件
带有登录名称空间的名称。 名称空间为颜色
使用 colorspace 模块,将类似命名空间放在相同的下
色相空间. 您可以为调试器设置多个命名空间
命名空间应当用 :
foo
foo:bar
foo:bar:baz
对于基于控制台的输出 namespace-ansi 已使用.
适配器
适应器允许 diagnostics 来拉 DEBUG 财务报告和审定财务报表 DIAGNOSTICS 环境
来自不同来源的变量。 并非每个 JavaScript 环境都有
process.env 我们可以发挥杠杆作用。 适应器可以让我们有不同的
适用于不同环境的适配器。 意思是你可以写出自己的习惯
适配器,如果需要的话.
这个 adapter 函数应该传递一个函数作为参数,这个函数
将接收 namespace 作为参数的日志应该返回 a
布尔表示是否启用该日志 .
const debug = require('@dabh/diagnostics')('example:namespace');
debug.adapter(require('@dabh/diagnostics/adapters/localstorage'));
修改器只允许 development下列适配器为
备有:
进程.env
此适配器启用于 node.js。 。 。 .
使用 DEBUG 或者说 DIAGNOSTICS (两者都被确认)环境变量
以调试旗通过 :
UNIX/Linux/马克
DEBUG=foo* node index.js
在Windows上使用环境变量有点不同,也取决于 您正在使用的工具链 :
窗口
set DEBUG=foo* & node index.js
动力壳
$env:DEBUG='foo*';node index.js
散列轴
此适配器启用于 browsers。 。 。 .
此适配器使用 window.location.hash 作为环境来源
变量。 它假设散列格式化使用与查询相同的语法
字符串 :
http://example.com/foo/bar#debug=foo*
它触发两个 debug= 财务报告和审定财务报表 diagnostics= 名称.
本地图集
此适配器启用于 browsers。 。 。 .
此适配器使用 localStorage ,用于存储调试旗的浏览器.
您可以在应用程序代码中设置调试标记, 但您可以
还打开了浏览器WebInspector,并通过控制台启用.
localStorage.setItem('debug', 'foo*');
它触发两个 debug 财务报告和审定财务报表 diagnostics 存储项目。 (请注意)
以小写输入这些密钥)
同步组合
此适配器启用于 react-native。 。 。 .
此适配器使用 AsyncStorage API 显示于 react-native
库以存储并读取 debug 或者说 diagnostics 存储项目.
import { AsyncStorage } from 'react-native';
AsyncStorage.setItem('debug', 'foo*');
与其他适配器不同,这是唯一的适配器是 async 所以这意味着
我们无法立即确定 是否应该建立一个日志
启用或禁用。 当日志被创建时 react-native 我们刚开始
假设已禁用, 期间发送的任何信件都会被排队
内部.
一旦我们收到数据 AsyncStorage API 我们会决定
如果启用了日志, 将队列中的信件冲出并设定
全部 enabled 返回的日志中相应的属性.
盗取者
默认情况下, 它会记录所有信件到 console.log 当日志为时
启用了使用一个适配器设置的调试旗.