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 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 usati per scrivere in qualsiasi stream di Node.js.
  • Un'istanza console globale configurata per scrivere in process.stdout e process.stderr. La console globale può essere usata senza chiamare require('node:console').

Attenzione: I metodi dell'oggetto console globale non sono né costantemente sincroni come le API del browser a cui assomigliano, né costantemente asincroni come tutti gli altri stream di 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. Vedi la nota sull'I/O del processo per maggiori informazioni.

Esempio di utilizzo della console globale:

js
console.log('ciao mondo')
// Stampa: ciao mondo, su stdout
console.log('ciao %s', 'mondo')
// Stampa: ciao mondo, su stdout
console.error(new Error('Oops, è successo qualcosa di brutto'))
// Stampa messaggio di errore e stack trace su stderr:
//   Error: Oops, è successo qualcosa di brutto
//     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(`Pericolo ${name}! Pericolo!`)
// Stampa: Pericolo Will Robinson! Pericolo!, su stderr

Esempio di utilizzo della classe Console:

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

myConsole.log('ciao mondo')
// Stampa: ciao mondo, su out
myConsole.log('ciao %s', 'mondo')
// Stampa: ciao mondo, su out
myConsole.error(new Error('Oops, è successo qualcosa di brutto'))
// Stampa: [Error: Oops, è successo qualcosa di brutto], su err

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

Classe: Console

[Cronologia]

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

La classe Console può essere utilizzata per creare un logger semplice con flussi di output configurabili ed è possibile accedervi tramite 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]

VersioneCambiamenti
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 l'indentazione del gruppo. Predefinito: 2.

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

js
import { createWriteStream } from 'node:fs'
import { Console } from 'node:console'
// In alternativa
// const { Console } = console;

const output = createWriteStream('./stdout.log')
const errorOutput = createWriteStream('./stderr.log')
// Logger semplice personalizzato
const logger = new Console({ stdout: output, stderr: errorOutput })
// Usalo come 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')
// In alternativa
// const { Console } = console;

const output = fs.createWriteStream('./stdout.log')
const errorOutput = fs.createWriteStream('./stderr.log')
// Logger semplice personalizzato
const logger = new Console({ stdout: output, stderr: errorOutput })
// Usalo come console
const count = 5
logger.log('count: %d', count)
// In stdout.log: count 5

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

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

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

[Cronologia]

VersioneCambiamenti
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 usando util.format().

Se value è truthy, non succede nulla.

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

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

console.assert()
// Assertion failed

console.clear()

Aggiunto in: v8.3.0

Quando stdout è un TTY, chiamare 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 terminali. Per la maggior parte dei sistemi operativi Linux, console.clear() opera in modo simile al comando shell clear. Su Windows, console.clear() cancellerà solo l'output nella viewport del terminale corrente per il binario di 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 e invia a stdout il numero di volte in cui console.count() è stato chiamato con la label specificata.

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 <string> 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 <any>
  • options <Object>
    • showHidden <boolean> Se true, verranno mostrate anche le proprietà non enumerabili e simboliche dell'oggetto. Predefinito: false.
    • depth <number> Indica a util.inspect() quante volte ricorrere durante la formattazione dell'oggetto. Ciò è utile per ispezionare oggetti grandi e complessi. Per farlo ricorrere all'infinito, passare null. Predefinito: 2.
    • colors <boolean> 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 ignora 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 in modo simile 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 ciascun argomento e i valori delle stringhe 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 per primi 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 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 count = 5
console.log('count: %d', count)
// Stampa: count: 5, su stdout
console.log('count:', count)
// Stampa: count: 5, su 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 usa properties) e le righe di tabularData e registrarla. Ricade semplicemente sulla registrazione dell'argomento se non può essere analizzato come tabellare.

js
// Questi non possono essere analizzati come dati tabellari
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. Utilizzare la stessa label quando si chiama console.timeEnd() per fermare il timer e restituire il tempo trascorso in unità di tempo appropriate a stdout. Ad esempio, se il tempo trascorso è 3869ms, console.timeEnd() visualizza "3.869s".

console.timeEnd([label])

[Cronologia]

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

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

js
console.time('bunch-of-stuff')
// Fai un sacco di cose.
console.timeEnd('bunch-of-stuff')
// Stampa: bunch-of-stuff: 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('process')
const value = expensiveProcess1() // Restituisce 42
console.timeLog('process', value)
// Stampa "process: 365.227ms 42".
doExpensiveProcess2(value)
console.timeEnd('process')

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

Aggiunto in: v0.1.104

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

js
console.trace('Show me')
// Stampa: (la traccia dello stack varierà in base a dove viene chiamata la traccia)
//  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])

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 visualizzano nulla se non utilizzati insieme all'inspector (flag --inspect).

console.profile([label])

Aggiunto in: v8.0.0

Questo metodo non visualizza nulla se non 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')
// Alcune codice
console.profileEnd('MyLabel')
// Aggiunge il profilo 'MyLabel' al pannello Profiles dell'inspector.

console.profileEnd([label])

Aggiunto in: v8.0.0

Questo metodo non visualizza nulla se non utilizzato nell'inspector. Interrompe la sessione di profilazione della CPU JavaScript corrente, se ne è stata avviata una, e stampa il report nel pannello Profiles dell'inspector. Vedere console.profile() per un esempio.

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

console.timeStamp([label])

Aggiunto in: v8.0.0

Questo metodo non visualizza nulla se non utilizzato nell'inspector. Il metodo console.timeStamp() aggiunge un evento con l'etichetta 'label' al pannello Timeline dell'inspector.