我有一个(节点)JS 类:
class PayloadContainingError extends Error {
constructor(msg, payload) {
super(msg);
this.payload = payload;
}
}
payload
字段可能包含长字符串,即使在 MB 范围内。
如果我在某个时候console.log
这个类,我会在日志中得到完整的 payload
。
相反,我希望它记录截断的部分(如 Linux head
命令)。
例如如果我console.error("Bad payload", instance_of_PayloadContainingError)
,而不是得到
Bad payload { Error: BAD
at foo.bar
payload:
'a possibly million-character long line that pollutes my log'
}
我想要 console
登录
Bad payload { Error: BAD
at foo.bar
payload:
'first 100 chars...'
}
这是否可以通过类/字段级别的一些魔法实现 - 无需重构任何(现有的和未来的)console.log
调用?
[编辑]
对于那些投票结束这个问题以支持“JavaScript toString() 覆盖”的人:根据我的理解,toString()
不是这里的问题 - console
似乎超出了 toString()
通常所做的, 在记录错误对象时(例如添加堆栈跟踪 - 我不想重新实现)。 (正如我在评论中提到的,覆盖 toString()
无论如何都不会改变输出。)