TypeScript:
Registrazione delle Attività (Logging)
Come fare:
In TypeScript, è possibile implementare facilmente un logging di base utilizzando i metodi della console o integrare un logging più avanzato con librerie come winston
o pino
. Ecco un esempio di base che utilizza console.log
e uno più avanzato con winston
.
// Logging di base della console
console.log('Info: Avvio dell\'applicazione...');
console.error('Errore: Impossibile recuperare i dati.');
// Output di esempio
// Info: Avvio dell'applicazione...
// Errore: Impossibile recuperare i dati.
Per un logging più robusto, configuriamo winston
:
import { createLogger, format, transports } from 'winston';
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
),
transports: [
new transports.Console(),
new transports.File({ filename: 'combined.log' })
]
});
logger.info('Server avviato!');
logger.warn('Attenzione: Spazio su disco basso.');
logger.error('Errore durante la connessione al database.');
// Output di esempio in combined.log
// 2023-01-20 14:42:07 info: Server avviato!
// 2023-01-20 14:42:09 warn: Attenzione: Spazio su disco basso.
// 2023-01-20 14:42:12 error: Errore durante la connessione al database.
Approfondimento:
Il concetto di logging nel contesto dell’informatica risale ai primi giorni della programmazione, dove il termine stesso deriva dal “logbook”, un sistema di registrazione utilizzato in ambito nautico. Storicamente, gli eventi dei programmi venivano spesso registrati su stampati fisici o output del terminale, specialmente durante l’era dei mainframe.
Oggi, abbiamo a disposizione una pletora di strumenti e librerie che soddisfano varie esigenze di logging, da semplici file di testo a complessi sistemi di gestione dei log. Alternative a winston
includono pino
, che vanta alte prestazioni, e Bunyan
, che si basa su JSON. Quando si lavora con Node.js, le librerie di logging offrono spesso meccanismi di stream per indirizzare i log verso diverse destinazioni, supporto per la rotazione dei log e formattatori personalizzabili.
Dal punto di vista dell’implementazione, i messaggi di log contengono tipicamente un timestamp, un livello di gravità (come info, warn, error) e il messaggio effettivo. Una buona pratica di logging raccomanda di categorizzare correttamente i livelli di log, evitare dati sensibili nei log e considerare le implicazioni sulle performance in applicazioni ad alto traffico.