### 穩定度: 2 - 穩定
這個模塊定義了一個控制臺類,并且暴露了一個`console`對象。
`console`對象是一個特殊的`Console`實例,它的輸出被傳至`stdout`或`stderr`。
為了使用的方便,`console`被定義為一個全局對象,不需要通過`require`就可直接使用。
#### console
- Object
用來向`stdout`和`stderr`打印信息。與大多數瀏覽器提供的`console`對象的功能類似,只是這里輸出被傳至`stdout`或`stderr`。
當目的地是終端或文件時(為了避免過早退出丟失信息),`console`函數時同步的。當目的地是管道時(為了避免長時間阻塞),`console`函數時異步的。
下面的例子里,`stdout`是非阻塞的,`stderr`是阻塞的:
~~~
$ node script.js 2> error.log | tee info.log
~~~
日常使用時,除了你需要記錄大量數量的數據,你不用擔心阻塞/非阻塞。
#### console.log([data][, ...])
向`stdout`打印一行新信息。這個函數可以像`printf()`那樣接受多個參數,例子:
~~~
var count = 5;
console.log('count: %d', count);
// prints 'count: 5'
~~~
如果第一個字符串中沒有發現格式化元素,那么`util.inspect`將被應用到各個參數。詳情參閱`util.format()`。
#### console.info([data][, ...])
與`console.log`相同。
#### console.error([data][, ...])
與`console.log`相同。但是輸出至`stderr`。
#### console.warn([data][, ...])
與`console.err`相同。
#### console.dir(obj[, options])
對`obj`調用`util.inspect`并且將結果字符串輸出至`stdout`。這個函數會忽略`obj`上的任何自定義`inspect()`函數。一個可選的`options`參數可以被傳遞用來格式化字符串的某些方面:
-
showHidden - 如果為`true`,`object`的不可枚舉和標志屬性也會被顯示。默認為`false`。
-
depth - 告訴`inspect`在格式化對象時遞歸多少次。在檢查大而復雜的對象時很有用。默認為2。若要遞歸到底則傳遞`null`。
-
colors - 如果為`true`,那么輸出會以ANSI顏色碼的形式輸出。默認為`false`。顏色是可以自定義,參閱下文。
#### console.time(label)
被用來計算指定操作之間時間間隔。為了開始一個`timer`,調用`console.time()`方法,作為唯一參數可以給它一個名字。為了關閉一個`timer`,并且得到毫秒間隔,僅僅以相同的名字參數調用一次`console.timeEnd()`。
#### console.timeEnd(label)
停止一個之前通過`console.time()`開啟的`timer`,并且向控制臺打印結果。
例子:
~~~
console.time('100-elements');
for (var i = 0; i < 100; i++) {
;
}
console.timeEnd('100-elements');
// prints 100-elements: 262ms
~~~
#### console.trace(message[, ...])
向`stderr`打印`'Trace :'`,跟隨著格式化信息和堆棧信息。
#### console.assert(value[, message][, ...])
與`assert.ok()`類似,但是錯誤信息被像`util.format(message...)`一樣格式化。
#### Class: Console
使用`require('console')`后。`Console`或`console.Console`可以取得這個類。
~~~
var Console = require('console').Console;
var Console = console.Console;
~~~
你可以調用`Console`類來自定義如`console`一樣的簡單日記記錄器,但是有不同的輸出流。
#### new Console(stdout[, stderr])
通過傳遞一個或兩個可寫流實例,創建一個新的`Console`。`stdout`是一個用來打印日志和信息的輸出流。`stderr`是一個被用來打印警告和錯誤輸出的。如果`stderr`沒有被傳遞,那么警告和錯誤信息將被傳遞至`stdout`。
~~~
var output = fs.createWriteStream('./stdout.log');
var errorOutput = fs.createWriteStream('./stderr.log');
// custom simple logger
var logger = new Console(output, errorOutput);
// use it like console
var count = 5;
logger.log('count: %d', count);
// in stdout.log: count 5
~~~
全局的`console`是一個特殊的`Console`實例,它的輸出被傳遞至`process.stdout`和`process.stderr`:
~~~
new Console(process.stdout, process.stderr);
~~~