Cat Client for Node.js
优质
小牛编辑
127浏览
2023-12-01
nodecat
支持 node v8 及以上版本。
Changelog
3.1.x
众所周知,node.js 是一个事件驱动的编程语言,这使得我们很难追踪消息。
Transaction 可以交错,令我们无法得知谁是谁的父节点。
这造成了一些问题,因此我们将默认模式降级为原子模式, 所有的消息在 complete 之后都会被立刻发送。
然而消息树在一些场景下很有用,因此我们在这个版本提供了一种船新的线程模式。
在这一模式下,第一个 transaction 将会被作为根结点,随后所有的 transaction 和 event 都会被作为子节点。他们不会在 complete 之后被发送,取而代之的是在根结点 complete 后,整个消息树都会被发送。
这里有个例子:
var cat = require('@dp-cat/client')
cat.init({
appkey: 'nodecat'
})
cat = new cat.Cat(true)
let a = cat.newTransaction("Context", "A")
let b = cat.newTransaction("Context", "B")
let c = cat.newTransaction("Context", "C")
setTimeout(function() {
b.complete()
}, 1000)
setTimeout(function() {
c.complete()
}, 1500)
setTimeout(function() {
a.complete()
console.log("a complete")
}, 2000)
Requirements
nodecat
需要 libcatclient.so
被安装在 LD_LIBRARY_PATH
目录下。
请参阅 ccat 安装 以获取进一步的信息。
Installation
via npm
npm i @dp-cat/client
Initialization
一些准备工作需要在初始化 gocat
之前完成。
然后你就可以通过下面的代码初始化 nodecat
了:
var cat = require('@dp-cat/client')
cat.init({
appkey: 'your-appkey'
})
appkey 只能包含英文字母 (a-z, A-Z)、数字 (0-9)、下划线 (_) 和中划线 (-)
Documentation
Transaction
let t = cat.newTransaction('foo', 'bar')
setTimeout(() => t.complete(), 3000)
Transaction apis
我们提供了一组 API 来修改 transaction 的属性。
- addData
- setStatus
- complete
这些 API 可以很方便的通过如下代码使用:
let t = cat.newTransaction('foo', 'bar')
t.addData("key", "val")
t.addData("context")
t.setStatus(cat.STATUS.SUCCESS)
setTimeout(() => t.complete(), 3000)
你可以调用
addData
多次,他们会被&
连接起来。
Event
logEvent
// 记录一个信息,默认成功并且没有 data
cat.logEvent("Event", "E1")
// 第三个参数 (status) 是可选的,默认是 "0"
// 可以是任意字符串类型
// 当传入的 status 不是 cat.STATUS.SUCCESS ("0") 时,event 会被作为 "problem"
// 并且会被记录到我们的 problem 报表中
cat.logEvent("Event", "E2", cat.STATUS.FAIL)
cat.logEvent("Event", "E3", "failed")
// 第四个参数 (data) 是可选的,默认是 ""
// 可以是任意字符串类型
cat.logEvent("Event", "E4", "failed", "some debug info")
// 第四个参数 (data) 也可以是一个 Object
// 在这个情况下,Object 会被序列化为 json 格式的字符串。
cat.logEvent("Event", "E5", "failed", {a: 1, b: 2})
logError
记录一个带堆栈信息的错误
错误是一种特殊的 event,默认情况下 type = Exception
,name
通过第一个参数指定。
错误堆栈会被收集并存放在 data
属性中,这通常对调试有很大帮助。
cat.logError('ErrorInTransaction', new Error())