Technogi Tech Blog

Logs for Development

Evaluación de librerías para logs

  • Considerar los mecanismos o protocolos de transporte:
    • File
    • Console
    • Syslog
    • HTTP
    • Stream
  • Buscar siempre que el mecanismo de logging sea de forma asíncrona
  • Para el tema en particular de desarrollo fullstack (dependiendo del stack) considerar en la manera de lo posible que la librería corra sobre el stack completo.
  • Buscar que la librería pueda integrarse con otros servicios o mecanismos de logging para cuestiones cómo: Persistencia, Búsqueda o Rastreo, Centralización, Agregación.
    • Loggly
    • Elasticsearch - Logstash - Kibana

Niveles de logs

  • De acuerdo a su nivel de importancia y/o prioridad los logs se pueden categorizar en (dependiendo de la librería o protocolo):
    • error
    • warn
    • info
    • verbose
    • debug
  • Caso particular para java (Logback):
    • TRACE < DEBUG < INFO < WARN < ERROR < OFF

Reglas

  • Evitar uso de métodos bloqueantes:
    • console.log
    • System.out.print*
  • Los servicios corriendo en producción deben siempre correr con un nivel de logs muy bajo:
    • error o warn (O el nivel correspondiente de acuerdo a la librería)
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    //
    // - Write to all logs with level `info` and below to `combined.log` 
    // - Write all logs error (and below) to `error.log`.
    //
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

//
// If we're not in production then log to the `console` with the format:
// `${info.level}: ${info.message} JSON.stringify({ ...rest }) `
// 
if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({
    format: winston.format.simple()
  }));
}

Enlaces recomendados