跳到主要内容

记录日志

日志与 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 对象中的错误调用堆栈。