Console#

穩定性:2 - 穩定

原始碼: lib/console.js

node:console 模組提供了一個簡單的除錯控制檯,類似於 Web 瀏覽器提供的 JavaScript 控制檯機制。

該模組匯出兩個特定的元件

  • 一個 Console 類,它擁有諸如 console.log()console.error()console.warn() 等方法,可用於寫入任何 Node.js 流。
  • 一個全域性的 console 例項,配置為寫入 process.stdoutprocess.stderr。全域性的 console 可以在不呼叫 require('node:console') 的情況下使用。

警告:全域性控制檯物件的方法既不像它們所模仿的瀏覽器 API 那樣始終同步,也不像所有其他 Node.js 流那樣始終非同步。希望依賴於控制檯函式同步/非同步行為的程式應首先確定控制檯底層流的性質。這是因為該流取決於當前程序的底層平臺和標準流配置。有關更多資訊,請參閱關於程序 I/O 的說明

使用全域性 console 的示例

console.log('hello world');
// Prints: hello world, to stdout
console.log('hello %s', 'world');
// Prints: hello world, to stdout
console.error(new Error('Whoops, something bad happened'));
// Prints error message and stack trace to stderr:
//   Error: Whoops, something bad happened
//     at [eval]:5:15
//     at Script.runInThisContext (node:vm:132:18)
//     at Object.runInThisContext (node:vm:309:38)
//     at node:internal/process/execution:77:19
//     at [eval]-wrapper:6:22
//     at evalScript (node:internal/process/execution:76:60)
//     at node:internal/main/eval_string:23:3

const name = 'Will Robinson';
console.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to stderr 

使用 Console 類的示例

const out = getStreamSomehow();
const err = getStreamSomehow();
const myConsole = new console.Console(out, err);

myConsole.log('hello world');
// Prints: hello world, to out
myConsole.log('hello %s', 'world');
// Prints: hello world, to out
myConsole.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to err

const name = 'Will Robinson';
myConsole.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err 

類:Console#

Console 類可用於建立一個具有可配置輸出流的簡單記錄器,可以透過 require('node:console').Consoleconsole.Console(或它們的解構對應項)來訪問。

import { Console } from 'node:console';const { Console } = require('node:console');
const { Console } = console; 

new Console(stdout[, stderr][, ignoreErrors])#

new Console(options)#

  • options <Object>
    • stdout <stream.Writable>
    • stderr <stream.Writable>
    • ignoreErrors <boolean> 在寫入底層流時忽略錯誤。預設值: true
    • colorMode <boolean> | <string> 為此 Console 例項設定顏色支援。設定為 true 可在檢查值時啟用著色。設定為 false 可在檢查值時停用著色。設定為 'auto' 使顏色支援取決於 isTTY 屬性的值以及相應流上 getColorDepth() 返回的值。如果同時設定了 inspectOptions.colors,則不能使用此選項。預設值: 'auto'
    • inspectOptions <Object> | <Map> 指定傳遞給 util.inspect() 的選項。可以是一個選項物件,或者如果需要為 stdout 和 stderr 指定不同選項,則為一個從流物件到選項的 Map
    • groupIndentation <number> 設定分組縮排。預設值: 2

用一個或兩個可寫流例項建立一個新的 Consolestdout 是一個用於列印日誌或資訊輸出的可寫流。stderr 用於警告或錯誤輸出。如果未提供 stderr,則 stdout 將用於 stderr

import { createWriteStream } from 'node:fs';
import { Console } from 'node:console';
// Alternatively
// const { Console } = console;

const output = createWriteStream('./stdout.log');
const errorOutput = createWriteStream('./stderr.log');
// Custom simple logger
const logger = new Console({ stdout: output, stderr: errorOutput });
// use it like console
const count = 5;
logger.log('count: %d', count);
// In stdout.log: count 5const fs = require('node:fs');
const { Console } = require('node:console');
// Alternatively
// const { Console } = console;

const output = fs.createWriteStream('./stdout.log');
const errorOutput = fs.createWriteStream('./stderr.log');
// Custom simple logger
const logger = new Console({ stdout: output, stderr: errorOutput });
// use it like console
const count = 5;
logger.log('count: %d', count);
// In stdout.log: count 5

全域性 console 是一個特殊的 Console,其輸出被髮送到 process.stdoutprocess.stderr。它等同於呼叫:

new Console({ stdout: process.stdout, stderr: process.stderr }); 

console.assert(value[, ...message])#

  • value <any> 用於測試是否為真值的值。
  • ...message <any> 除了 value 之外的所有引數都用作錯誤訊息。

如果 value假值或被省略,console.assert() 會寫入一條訊息。它只寫入訊息,不影響其他執行。輸出總是以 "Assertion failed" 開頭。如果提供了 message,則使用 util.format() 對其進行格式化。

如果 value真值,則什麼也不發生。

console.assert(true, 'does nothing');

console.assert(false, 'Whoops %s work', 'didn\'t');
// Assertion failed: Whoops didn't work

console.assert();
// Assertion failed 

console.clear()#

stdout 是一個 TTY 時,呼叫 console.clear() 將嘗試清除 TTY。當 stdout 不是 TTY 時,此方法不執行任何操作。

console.clear() 的具體操作可能因作業系統和終端型別而異。對於大多數 Linux 作業系統,console.clear() 的操作類似於 clear shell 命令。在 Windows 上,console.clear() 將僅清除 Node.js 二進位制檔案當前終端視口中的輸出。

console.count([label])#

  • label <string> 計數器的顯示標籤。預設值: 'default'

維護一個特定於 label 的內部計數器,並向 stdout 輸出使用給定 label 呼叫 console.count() 的次數。

> console.count()
default: 1
undefined
> console.count('default')
default: 2
undefined
> console.count('abc')
abc: 1
undefined
> console.count('xyz')
xyz: 1
undefined
> console.count('abc')
abc: 2
undefined
> console.count()
default: 3
undefined
> 

console.countReset([label])#

  • label <string> 計數器的顯示標籤。預設值: 'default'

重置特定於 label 的內部計數器。

> console.count('abc');
abc: 1
undefined
> console.countReset('abc');
undefined
> console.count('abc');
abc: 1
undefined
> 

console.debug(data[, ...args])#

console.debug() 函式是 console.log() 的一個別名。

console.dir(obj[, options])#

  • obj <any>
  • options <Object>
    • showHidden <boolean> 如果為 true,則物件的不可列舉屬性和符號屬性也將顯示。預設值: false
    • depth <number> 告訴 util.inspect() 在格式化物件時遞迴多少次。這對於檢查大型複雜物件很有用。要使其無限遞迴,請傳遞 null預設值: 2
    • colors <boolean> 如果為 true,則輸出將使用 ANSI 顏色程式碼進行樣式化。顏色是可定製的;請參閱自定義 util.inspect() 顏色預設值: false

obj 使用 util.inspect() 並將結果字串列印到 stdout。此函式會繞過 obj 上定義的任何自定義 inspect() 函式。

console.dirxml(...data)#

此方法呼叫 console.log(),並將其接收到的引數傳遞給它。此方法不產生任何 XML 格式。

console.error([data][, ...args])#

列印到 stderr 並換行。可以傳遞多個引數,第一個用作主要訊息,所有附加引數用作類似於 printf(3) 的替換值(所有引數都傳遞給 util.format())。

const code = 5;
console.error('error #%d', code);
// Prints: error #5, to stderr
console.error('error', code);
// Prints: error 5, to stderr 

如果在第一個字串中未找到格式化元素(例如 %d),則對每個引數呼叫 util.inspect() 並連線生成的字串值。有關更多資訊,請參閱 util.format()

console.group([...label])#

將後續行的縮排增加 groupIndentation 長度的空格。

如果提供了一個或多個 label,則首先列印它們,不帶額外的縮排。

console.groupCollapsed()#

console.group() 的別名。

console.groupEnd()#

將後續行的縮排減少 groupIndentation 長度的空格。

console.info([data][, ...args])#

console.info() 函式是 console.log() 的一個別名。

console.log([data][, ...args])#

列印到 stdout 並換行。可以傳遞多個引數,第一個用作主要訊息,所有附加引數用作類似於 printf(3) 的替換值(所有引數都傳遞給 util.format())。

const count = 5;
console.log('count: %d', count);
// Prints: count: 5, to stdout
console.log('count:', count);
// Prints: count: 5, to stdout 

有關更多資訊,請參閱 util.format()

console.table(tabularData[, properties])#

  • tabularData <any>
  • properties <string[]> 用於構造表格的備用屬性。

嘗試用 tabularData 的屬性作為列(或使用 properties)和 tabularData 的行來構造一個表格並列印它。如果無法將其解析為表格資料,則回退到僅記錄該引數。

// These can't be parsed as tabular data
console.table(Symbol());
// Symbol()

console.table(undefined);
// undefined

console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }]);
// ┌─────────┬─────┬─────┐
// │ (index) │ a   │ b   │
// ├─────────┼─────┼─────┤
// │ 0       │ 1   │ 'Y' │
// │ 1       │ 'Z' │ 2   │
// └─────────┴─────┴─────┘

console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }], ['a']);
// ┌─────────┬─────┐
// │ (index) │ a   │
// ├─────────┼─────┤
// │ 0       │ 1   │
// │ 1       │ 'Z' │
// └─────────┴─────┘ 

console.time([label])#

啟動一個計時器,可用於計算操作的持續時間。計時器由唯一的 label 標識。在呼叫 console.timeEnd() 時使用相同的 label 來停止計時器,並以適當的時間單位向 stdout 輸出經過的時間。例如,如果經過的時間是 3869 毫秒,console.timeEnd() 將顯示 "3.869s"。

console.timeEnd([label])#

停止先前透過呼叫 console.time() 啟動的計時器,並將結果列印到 stdout

console.time('bunch-of-stuff');
// Do a bunch of stuff.
console.timeEnd('bunch-of-stuff');
// Prints: bunch-of-stuff: 225.438ms 

console.timeLog([label][, ...data])#

對於先前透過呼叫 console.time() 啟動的計時器,將經過的時間和其他 data 引數列印到 stdout

console.time('process');
const value = expensiveProcess1(); // Returns 42
console.timeLog('process', value);
// Prints "process: 365.227ms 42".
doExpensiveProcess2(value);
console.timeEnd('process'); 

console.trace([message][, ...args])#

stderr 列印字串 'Trace: ',其後是使用 util.format() 格式化的訊息以及到程式碼當前位置的堆疊跟蹤。

console.trace('Show me');
// Prints: (stack trace will vary based on where trace is called)
//  Trace: Show me
//    at repl:2:9
//    at REPLServer.defaultEval (repl.js:248:27)
//    at bound (domain.js:287:14)
//    at REPLServer.runBound [as eval] (domain.js:300:12)
//    at REPLServer.<anonymous> (repl.js:412:12)
//    at emitOne (events.js:82:20)
//    at REPLServer.emit (events.js:169:7)
//    at REPLServer.Interface._onLine (readline.js:210:10)
//    at REPLServer.Interface._line (readline.js:549:8)
//    at REPLServer.Interface._ttyWrite (readline.js:826:14) 

console.warn([data][, ...args])#

console.warn() 函式是 console.error() 的一個別名。

僅限檢查器的方法#

以下方法由 V8 引擎在通用 API 中公開,但除非與檢查器--inspect 標誌)結合使用,否則不會顯示任何內容。

console.profile([label])#

除非在檢查器中使用,否則此方法不會顯示任何內容。console.profile() 方法啟動一個 JavaScript CPU 分析,帶有一個可選的標籤,直到呼叫 console.profileEnd()。該分析隨後會新增到檢查器的 Profile 面板中。

console.profile('MyLabel');
// Some code
console.profileEnd('MyLabel');
// Adds the profile 'MyLabel' to the Profiles panel of the inspector. 

console.profileEnd([label])#

除非在檢查器中使用,否則此方法不會顯示任何內容。如果當前有正在進行的 JavaScript CPU 分析會話,則停止它,並將報告列印到檢查器的 Profiles 面板。有關示例,請參見 console.profile()

如果呼叫此方法時不帶標籤,則會停止最近啟動的分析。

console.timeStamp([label])#

除非在檢查器中使用,否則此方法不會顯示任何內容。console.timeStamp() 方法向檢查器的 Timeline 面板新增一個帶有標籤 'label' 的事件。