记录日志
日志与 debug 不同点在于,日志是需要记录并落盘的,而 debug 则是本地开发临时查看使用。
日志用于生产环境,debug 用于本地开发。
日志是分级别的,不同的级别代表着不同的重要性,如下:
方法 | 名称 | 数值 | 说明 |
---|---|---|---|
trace | 追踪 | 10 | 调试追踪 |
debug | 调试 | 20 | 调试信息 |
info | 常规 | 30 | 正常情况的提示信息 |
warn | 警告 | 40 | 业务逻辑出现异常,但不影响运行流程 |
error | 错误 | 50 | 发生错误,影响流程需要终止当前业务流程 |
fatal | 致命 | 60 | 发生严重错误,系统不可响应,需要终止整个应用 |
提示
注意日志中的 debug
与本地开发调试用的 debug
函数不同,日志中的 debug
只是一种日志级别。
在代码中使用日志我们只需要使用 Context.log
对象即可,如下:
import { mapping, Context } from "zenweb";
export class Demo {
@mapping()
testLog(ctx: Context) {
// 记录日志
ctx.log.info("这里记录一下信息");
return "SUCCESS";
}
}
zenweb 中的日志一共分为两种:
- 一种是挂载在
Context
中,在记录日志信息的同时,还会记录请求信息。 - 另外一种是挂载在
Core
(应用程序) 中,没有请求上下文,不会记录请求信息。
日志系统还支持使用 child()
方法来扩充日志信息,例如:
const mylog = ctx.log.child({ myname: "Bob" });
mylog.info("你好");
mylog.info("测试");
// 记录下的日志
// { myname: "Bob", msg: "你好" }
// { myname: "Bob", msg: "测试" }
此功能大多数用于需要记录一些对象到日志中,例如 Error
对象。
try {
someError();
} catch (err) {
ctx.log.child({ err }).error("发生了一个错误");
}
与直接在日志字符串里记录不同的是,日志系统会根据传入对象的类型进行数据处理,比如记录 Error
对象中的错误调用堆栈。