Skip to content

Console

[Stabile: 2 - Stabile]

Stabile: 2 Stabilità: 2 - Stabile

Codice sorgente: lib/console.js

Il modulo node:console fornisce una semplice console di debug simile al meccanismo della console JavaScript fornito dai browser web.

Il modulo esporta due componenti specifici:

  • Una classe Console con metodi come console.log(), console.error() e console.warn() che possono essere utilizzati per scrivere su qualsiasi stream Node.js.
  • Un'istanza globale console configurata per scrivere su process.stdout e process.stderr. La console globale può essere utilizzata senza chiamare require('node:console').

Avviso: I metodi dell'oggetto console globale non sono né coerentemente sincroni come le API del browser a cui assomigliano, né coerentemente asincroni come tutti gli altri stream Node.js. I programmi che desiderano dipendere dal comportamento sincrono/asincrono delle funzioni della console dovrebbero prima capire la natura dello stream di supporto della console. Questo perché lo stream dipende dalla piattaforma sottostante e dalla configurazione dello stream standard del processo corrente. Consultare la nota sull'I/O del processo per ulteriori informazioni.

Esempio di utilizzo della console globale:

js
console.log('hello world');
// Stampa: hello world, su stdout
console.log('hello %s', 'world');
// Stampa: hello world, su stdout
console.error(new Error('Whoops, something bad happened'));
// Stampa il messaggio di errore e la traccia dello stack su 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!`);
// Stampa: Danger Will Robinson! Danger!, su stderr

Esempio di utilizzo della classe Console:

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

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

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

Classe: Console

[Cronologia]

VersioneModifiche
v8.0.0Gli errori che si verificano durante la scrittura nei flussi sottostanti saranno ora ignorati per impostazione predefinita.

La classe Console può essere utilizzata per creare un logger semplice con flussi di output configurabili e a cui è possibile accedere utilizzando require('node:console').Console o console.Console (o le loro controparti destrutturate):

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

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

new Console(options)

[Cronologia]

VersioneModifiche
v14.2.0, v12.17.0È stata introdotta l'opzione groupIndentation.
v11.7.0È stata introdotta l'opzione inspectOptions.
v10.0.0Il costruttore Console ora supporta un argomento options ed è stata introdotta l'opzione colorMode.
v8.0.0È stata introdotta l'opzione ignoreErrors.
  • options <Object>
    • stdout <stream.Writable>
    • stderr <stream.Writable>
    • ignoreErrors <boolean> Ignora gli errori durante la scrittura nei flussi sottostanti. Predefinito: true.
    • colorMode <boolean> | <string> Imposta il supporto del colore per questa istanza di Console. L'impostazione su true abilita la colorazione durante l'ispezione dei valori. L'impostazione su false disabilita la colorazione durante l'ispezione dei valori. L'impostazione su 'auto' fa dipendere il supporto del colore dal valore della proprietà isTTY e dal valore restituito da getColorDepth() sul rispettivo flusso. Questa opzione non può essere utilizzata se è impostato anche inspectOptions.colors. Predefinito: 'auto'.
    • inspectOptions <Object> Specifica le opzioni che vengono passate a util.inspect().
    • groupIndentation <number> Imposta il rientro del gruppo. Predefinito: 2.

Crea una nuova Console con una o due istanze di flusso scrivibili. stdout è un flusso scrivibile per stampare l'output di log o info. stderr viene utilizzato per l'output di avviso o errore. Se stderr non è fornito, stdout viene utilizzato per stderr.

js
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 5
js
const 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

La console globale è una Console speciale il cui output viene inviato a process.stdout e process.stderr. È equivalente a chiamare:

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

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

[Cronologia]

VersioneModifiche
v10.0.0L'implementazione è ora conforme alle specifiche e non genera più errori.
v0.1.101Aggiunto in: v0.1.101
  • value <any> Il valore testato per essere truthy.
  • ...message <any> Tutti gli argomenti oltre a value vengono utilizzati come messaggio di errore.

console.assert() scrive un messaggio se value è falsy o omesso. Scrive solo un messaggio e non influisce in altro modo sull'esecuzione. L'output inizia sempre con "Assertion failed". Se fornito, message viene formattato utilizzando util.format().

Se value è truthy, non accade nulla.

js
console.assert(true, 'non fa nulla');

console.assert(false, 'Ops %s non funziona', 'non');
// Assertion failed: Ops non funziona

console.assert();
// Assertion failed

console.clear()

Aggiunto in: v8.3.0

Quando stdout è un TTY, la chiamata a console.clear() tenterà di cancellare il TTY. Quando stdout non è un TTY, questo metodo non fa nulla.

L'operazione specifica di console.clear() può variare tra sistemi operativi e tipi di terminale. Per la maggior parte dei sistemi operativi Linux, console.clear() funziona in modo simile al comando shell clear. Su Windows, console.clear() cancellerà solo l'output nella viewport del terminale corrente per il binario Node.js.

console.count([label])

Aggiunto in: v8.3.0

  • label <string> L'etichetta di visualizzazione per il contatore. Predefinito: 'default'.

Mantiene un contatore interno specifico per label ed emette su stdout il numero di volte in cui console.count() è stato chiamato con il dato label.

js
> 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])

Aggiunto in: v8.3.0

  • label <stringa> L'etichetta di visualizzazione per il contatore. Predefinito: 'default'.

Ripristina il contatore interno specifico per label.

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

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

[Cronologia]

VersioneModifiche
v8.10.0console.debug è ora un alias per console.log.
v8.0.0Aggiunto in: v8.0.0

La funzione console.debug() è un alias per console.log().

console.dir(obj[, options])

Aggiunto in: v0.1.101

  • obj <qualsiasi>
  • options <Oggetto>
    • showHidden <booleano> Se true, verranno mostrate anche le proprietà non enumerabili e simboliche dell'oggetto. Predefinito: false.
    • depth <numero> Indica a util.inspect() quante volte ricorrere durante la formattazione dell'oggetto. Questo è utile per ispezionare oggetti grandi e complicati. Per farlo ricorrere all'infinito, passa null. Predefinito: 2.
    • colors <booleano> Se true, l'output verrà stilizzato con codici colore ANSI. I colori sono personalizzabili; vedere personalizzazione dei colori util.inspect(). Predefinito: false.

Utilizza util.inspect() su obj e stampa la stringa risultante su stdout. Questa funzione aggira qualsiasi funzione inspect() personalizzata definita su obj.

console.dirxml(...data)

[Cronologia]

VersioneModifiche
v9.3.0console.dirxml ora chiama console.log per i suoi argomenti.
v8.0.0Aggiunto in: v8.0.0

Questo metodo chiama console.log() passandogli gli argomenti ricevuti. Questo metodo non produce alcuna formattazione XML.

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

Aggiunto in: v0.1.100

Stampa su stderr con una nuova riga. È possibile passare più argomenti, con il primo utilizzato come messaggio principale e tutti gli altri utilizzati come valori di sostituzione simili a printf(3) (gli argomenti vengono tutti passati a util.format()).

js
const code = 5;
console.error('errore #%d', code);
// Stampa: errore #5, su stderr
console.error('errore', code);
// Stampa: errore 5, su stderr

Se gli elementi di formattazione (ad es. %d) non vengono trovati nella prima stringa, allora viene chiamato util.inspect() su ogni argomento e i valori stringa risultanti vengono concatenati. Vedi util.format() per maggiori informazioni.

console.group([...label])

Aggiunto in: v8.5.0

Aumenta l'indentazione delle righe successive di spazi per la lunghezza di groupIndentation.

Se vengono forniti uno o più label, questi vengono stampati prima senza l'indentazione aggiuntiva.

console.groupCollapsed()

Aggiunto in: v8.5.0

Un alias per console.group().

console.groupEnd()

Aggiunto in: v8.5.0

Diminuisce l'indentazione delle righe successive di spazi per la lunghezza di groupIndentation.

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

Aggiunto in: v0.1.100

La funzione console.info() è un alias per console.log().

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

Aggiunto in: v0.1.100

Stampa su stdout con un newline. Possono essere passati argomenti multipli, con il primo utilizzato come messaggio principale e tutti gli altri utilizzati come valori di sostituzione in modo simile a printf(3) (gli argomenti sono tutti passati a util.format()).

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

Vedi util.format() per maggiori informazioni.

console.table(tabularData[, properties])

Aggiunto in: v10.0.0

  • tabularData <any>
  • properties <string[]> Proprietà alternative per la costruzione della tabella.

Prova a costruire una tabella con le colonne delle proprietà di tabularData (o utilizza properties) e le righe di tabularData e la registra. Ricade semplicemente nella registrazione dell'argomento se non può essere analizzato come tabulare.

js
// Questi non possono essere analizzati come dati tabulari
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])

Aggiunto in: v0.1.104

Avvia un timer che può essere utilizzato per calcolare la durata di un'operazione. I timer sono identificati da una label univoca. Usa la stessa label quando chiami console.timeEnd() per fermare il timer e mostrare il tempo trascorso in unità di tempo adatte su stdout. Per esempio, se il tempo trascorso è 3869ms, console.timeEnd() mostrerà "3.869s".

console.timeEnd([label])

[Cronologia]

VersioneModifiche
v13.0.0Il tempo trascorso è mostrato con un'unità di tempo adatta.
v6.0.0Questo metodo non supporta più chiamate multiple che non corrispondono a singole chiamate console.time(); vedi sotto per i dettagli.
v0.1.104Aggiunto in: v0.1.104

Ferma un timer che era stato precedentemente avviato chiamando console.time() e stampa il risultato su stdout:

js
console.time('un-sacco-di-cose');
// Fai un sacco di cose.
console.timeEnd('un-sacco-di-cose');
// Stampa: un-sacco-di-cose: 225.438ms

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

Aggiunto in: v10.7.0

Per un timer che era stato precedentemente avviato chiamando console.time(), stampa il tempo trascorso e altri argomenti data su stdout:

js
console.time('processo');
const value = expensiveProcess1(); // Restituisce 42
console.timeLog('processo', value);
// Stampa "processo: 365.227ms 42".
doExpensiveProcess2(value);
console.timeEnd('processo');

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

Aggiunto in: v0.1.104

Stampa su stderr la stringa 'Trace: ', seguita dal messaggio formattato con util.format() e la stack trace alla posizione corrente nel codice.

js
console.trace('Mostrami');
// Stampa: (la stack trace varierà in base a dove trace è chiamato)
//  Trace: Mostrami
//    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])

Aggiunto in: v0.1.100

La funzione console.warn() è un alias per console.error().

Metodi solo per l'Inspector

I seguenti metodi sono esposti dal motore V8 nell'API generale ma non mostrano nulla a meno che non vengano utilizzati in combinazione con l'inspector (flag --inspect).

console.profile([label])

Aggiunto in: v8.0.0

Questo metodo non mostra nulla a meno che non venga utilizzato nell'inspector. Il metodo console.profile() avvia un profilo CPU JavaScript con un'etichetta opzionale fino a quando non viene chiamato console.profileEnd(). Il profilo viene quindi aggiunto al pannello Profile dell'inspector.

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

console.profileEnd([label])

Aggiunto in: v8.0.0

Questo metodo non mostra nulla a meno che non venga utilizzato nell'inspector. Interrompe la sessione di profilazione CPU JavaScript corrente, se ne è stata avviata una, e stampa il rapporto nel pannello Profiles dell'inspector. Vedi console.profile() per un esempio.

Se questo metodo viene chiamato senza un'etichetta, viene interrotto il profilo avviato più recentemente.

console.timeStamp([label])

Aggiunto in: v8.0.0

Questo metodo non mostra nulla a meno che non venga utilizzato nell'inspector. Il metodo console.timeStamp() aggiunge un evento con l'etichetta 'label' al pannello Timeline dell'inspector.