Nest 在日志中打印对象

Nest 自带的日志方法 Logger.log 签名如下:

static log(message: any, context?: string, isTimeDiffEnabled?: boolean): void;

只能通过指定期中的 message 打印文本。

所以它不能像原生的 console.log 那样直接打印对象,比如:

console.log('var:',someVariable);

但你可能会说,使用模板字符串就可以解决,像这样:

Logger.log(`var: ${someVariable}`);

实际上得到的输出:

[1] [Nest] 24911   - 09/16/2020, 2:20:20 PM   var: [object Object] +0ms

所以为了正常打印对象,还需要借助 node 自带的 util.inspect 将对象拍平:

import { inspect } from 'util';

Logger.log(`var: ${inspect(someVariable)}`);
// 作为对照:
console.log('var:', someVariable);

测试其输出:

[1] [Nest] 24911   - 09/16/2020, 2:20:20 PM   var: { blah: 1, foo: { bar: 'xxx' } } +2282ms
[1] var: { blah: 1, foo: { bar: 'xxx' } }

输出结果能够正常阅读了。

借助于 inspect,可以统一收敛日志的打印,而不用在单独需要打印对象的场景切换到 console.log,对于后面对日志作统一管理,打标签收集都有好处。

相关资源