[英]GAE node.js console.error() not logging as ERROR log level
[英]Why does `(console.error = console.trace)();` make `heap out of memory` in Node.js?
我正在使用Node.js v5.8.0。
我想使console.error
用作console.trace
,所以我使用了console.error = console.trace;
。 但是当我调用console.error
,发生了致命的内存错误:
<--- Last few GCs --->
29296 ms: Mark-sweep 1328.1 (1403.1) -> 1328.1 (1404.1) MB, 32.8 / 0.0 ms [allocation failure] [GC in old space requested].
29314 ms: Mark-sweep 1328.1 (1404.1) -> 1328.1 (1404.1) MB, 17.8 / 0.0 ms [allocation failure] [GC in old space requested].
29333 ms: Mark-sweep 1328.1 (1404.1) -> 1338.8 (1403.1) MB, 19.7 / 0.0 ms [last resort gc].
29353 ms: Mark-sweep 1338.8 (1403.1) -> 1349.7 (1403.1) MB, 19.3 / 0.0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 00000318EFDCFB61 <JS Object>
1: DoJoin(aka DoJoin) [native array.js:~129] [pc=00000130FFFB1B73] (this=00000318EFD04381 <undefined>,w=000001FBBADF90E1 <JS Array[17]>,x=17,N=00000318EFD043C1 <true>,J=000003D7BECEC771 <String[1]\: \n>,I=00000318EFDB46F1 <JS Function ConvertToString (SharedFunctionInfo 00000318EFD52DC9)>)
2: Join(aka Join) [native array.js:180] [pc=00000130FFF08772] (this=00000318EFD04381 <undefined>...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
什么原因? console.trace
是否在内部调用console.error
?
在NodeJS中, console.error
和console.warn
用于打印到标准错误输出。 console.trace
内部使用console.error
来打印到标准错误输出,因为console.trace
通常用于错误。
这是console.trace
调用console.error
的行的链接: https : //github.com/nodejs/node/blob/1c84579031e34326742c9c264f54625c5918197c/lib/console.js#L89
您可以尝试以下代码:
console.trace = function trace() {
var err = new Error();
err.name = 'Trace';
err.message = util.format.apply(null, arguments);
Error.captureStackTrace(err, trace);
this.oldWarn(err.stack);
};
console.oldWarn = console.warn;
console.error = console.warn = console.trace;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.