### 稳定度: 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);
~~~