1. 使用 日志输出 进行调试
控制台输出
console.log(); // haha
使用 logger 模块
框架内置了日志 功能,使用 logger.debug()
输出调试信息,推荐在应用代码中使用它。
**// controller
this.logger.debug(‘current user: %j’, this.user);
// service
this.ctx.logger.debug(‘debug info from service’);
// app/init.js
app.logger.debug(‘app init’);
通过 config.logger.level
来配置打印到文件的日志级别,通过 config.logger.consoleLevel
配置打印到终端的日志级别。
日志路径
- 所有日志文件默认都放在
${appInfo.root}/logs/${appInfo.name}
路径下,例如/home/admin/logs/example-app
。 - 在本地开发环境 (env: local) 和单元测试环境 (env: unittest),为了避免冲突以及集中管理,日志会打印在项目目录下的 logs 目录,例如
/path/to/example-app/logs/example-app
。
如果想自定义日志路径:
// config/config.${env}.js
exports.logger = {
dir: '/path/to/your/custom/log/dir',
};
使用 debug 模块
debug 模块是 Node.js 社区广泛使用的 debug 工具,很多模块都使用它模块打印调试信息,Egg 社区也广泛采用这一机制打印 debug 信息,推荐在框架和插件开发中使用它。
我们可以通过 DEBUG
环境变量选择开启指定的调试代码,方便观测执行过程。
(调试模块和日志模块不要混淆,而且日志模块也有很多功能,这里所说的日志都是调试信息。)
开启所有模块的日志:
$ DEBUG=* npm run dev
开启指定模块的日志:
$ DEBUG=egg* npm run dev
单元测试也可以用 DEBUG=* npm test
来查看测试用例运行的详细日志。
2. 使用 DevTools 进行调试
最新的 DevTools 只支持 Inspector Protocol 协议,故你需要使用 Node.js 8.x+ 的版本方能使用。
执行 npm run debug
启动:
➜ showcase git:(master) ✗ npm run debug
showcase@1.0.0 debug /Users/tz/Workspaces/eggjs/test/showcase
egg-bin debug
Debugger listening on ws://127.0.0.1:9229/f8258ca6-d5ac-467d-bbb1-03f59bcce85b
For help see https://nodejs.org/en/docs/inspector
2017-09-14 16:01:35,990 INFO 39940 [master] egg version 1.8.0
Debugger listening on ws://127.0.0.1:5800/bfe1bf6a-2be5-4568-ac7d-69935e0867fa
For help see https://nodejs.org/en/docs/inspector
2017-09-14 16:01:36,432 INFO 39940 [master] agent_worker#1:39941 started (434ms)
Debugger listening on ws://127.0.0.1:9230/2fcf4208-4571-4968-9da0-0863ab9f98ae
For help see https://nodejs.org/en/docs/inspector
9230 opened
Debug Proxy online, now you could attach to 9999 without worry about reload.
DevTools → chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9999/ws_proxy
然后选择以下一种方式即可:
- 直接访问控制台最后输出的
DevTools
地址,该地址是代理后的 worker,无需担心重启问题。 - 访问
chrome://inspect
,配置对应的端口,然后点击Open dedicated DevTools for Node
即可打开调试控制台。
3. 使用 VSCode 进行调试
方式一:
开启 VSCode 配置 Debug: Toggle Auto Attach
,然后在 Terminal 执行 npm run debug
即可。
【我也没有搞通,不明白怎么弄?!求路过的大佬指教。】
方式二:
配置 VSCode 的 .vscode/launch.json
,然后 F5 一键启动即可。(注意,需要关闭方式一中的配置)
1. 设置断点
如上图,点击左侧的行数,16行就可以打上断点了。
2. 配置launch.json
文件
2.1 进入调试窗口点击vscode
左侧的debug窗口,如果你之前没有配置过launch.json
文件,那么效果就会如下图一样。
2.2 新建launch.json
配置文件
点击左上方,【没有配置】,选择 添加配置;
VSCode本身就内置了Node.js的调试工具,如果将来你需要调试别的东西,可以在这里添加对应的调试插件工具。
新版本的VSCode会自动匹配环境,生成
launch.json
文件,如果你的木有生成,需要手动选择Node.js环境
2.3 添加配置launch.json
文件新建好后,我们需要进行一些配置操作,这里我们选择的是,附加到进程。
2.4 修改launch.json文件
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Egg",
"type": "node",
"request": "launch",
"cwd": "${workspaceRoot}",
"runtimeExecutable": "npm",
"windows": {
"runtimeExecutable": "npm.cmd"
},
"runtimeArgs": [
"run",
"debug"
],
"console": "integratedTerminal",
"protocol": "auto",
"restart": true,
"port": 9999,
"autoAttachChildProcesses": true
}
]
}
官方文档提供的 “port”: 9229 进不去断点,不知道为什么,网上查了下,改成9999正常。
3.启动调试
launch.json
文件配置和好后,然后按F5启动
接着在需要断点的代码位置进行断点,然后访问即可,会进入你打的断点,在上面的操作栏可以进行调试。
还可以查看打印变量信息
更多玩法自己探索哈~
官方文档也提供了一个 vscode-eggjs 扩展来自动生成配置。
更多 VSCode Debug 用法可以参见文档: Node.js Debugging in VS Code
参考文献:
https://eggjs.org/zh-cn/core/development.html#%E4%BD%BF%E7%94%A8-egg-bin-%E8%B0%83%E8%AF%95
https://wurh.github.io/2018/11/07/20181107/