Winston: No se están creando archivos de registro

Creado en 26 may. 2016  ·  27Comentarios  ·  Fuente: winstonjs/winston

SO: Ubuntu 14.04
NodeJS: 6.2.0
Winston: 2.2.0

El siguiente código no crea un archivo de registro:

const logger = new Winston.Logger({
    level: 'verbose',
    transports: [
      new Winston.transports.Console({
        timestamp: true
      }),
      new Winston.transports.File({
        filename: 'app.log',
        timestamp: true
      })
    ]
  });

logger.info('Holla');

Se registra en la terminal bien:

2016-05-26T13:11:49.927Z - info: Holla

Pero no se creó ningún archivo de registro.

Comentario más útil

Me acabo de encontrar con este problema. El directorio debe existir primero. winston creará nuevos archivos para usted, pero no parece crear nuevos directorios para usted (por ejemplo, debe crear el directorio "logs" si está intentando iniciar sesión en un archivo ubicado en logs / app.js)

Todos 27 comentarios

+1

+1

+1

+1

Parece un problema en el nodo 6 en fs.stat ()
Por alguna razón, nunca se ejecutó la devolución de llamada fs.stat ()

    fs.stat(fullname, function (err, stats) {
      if (err) {
        if (err.code !== 'ENOENT') {
          return self.emit('error', err);
        }
        return createAndFlush(0);
      }

      if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
        //
        // If `stats.size` is greater than the `maxsize` for
        // this instance then try again
        //
        return self._incFile(function() {
          checkFile(self._getFile());
        });
      }

      createAndFlush(stats.size);
    });
  })(this._getFile()); 

¿Esta arreglado?

Solucioné este problema dando la ruta absoluta así:
winston.add(winston.transports.File, { filename: $ {__ dirname} /logs/appError.log })

Esto es trabajo para mí. Yo tenía un problema recientemente en un proyecto con el uso de Winston Atom donde los archivos .gitignore no se muestran en el directorio de archivos del proyecto en Atom debido a una configuración actualizada en el paquete de vista de árbol ... (Opción: Ocultar VCS Ignorado Archivos)

_Utilizando Node 6.2.2 y Winston 2.2.0._

Código:

'use strict';

let Winston = require('winston');


const logger = new Winston.Logger({
    level: 'verbose',
    transports: [
      new Winston.transports.Console({
        timestamp: true
      }),
      new Winston.transports.File({
        filename: 'app.log',
        timestamp: true
      })
    ]
  });

logger.info('Holla');

Crea un archivo app.log con salida: {"level":"info","message":"Holla","timestamp":"2016-07-01T19:29:14.035Z"} y lo registra en la consola con 2016-07-01T19:29:14.034Z - info: Holla

Me acabo de encontrar con este problema. El directorio debe existir primero. winston creará nuevos archivos para usted, pero no parece crear nuevos directorios para usted (por ejemplo, debe crear el directorio "logs" si está intentando iniciar sesión en un archivo ubicado en logs / app.js)

Deseo que Winston verifique si la carpeta / directorio de registro existe, luego cree una carpeta / directorio de registro en caso de que no exista durante el inicio. Creo que fs puede hacer esto, ¿verdad?

+1

+1

+1

if (!fs.existsSync('path') {
    fs.mkdirSync('path');
}

http://thisdavej.com/using-winston-a-versatile-logging-library-for-node-js/

Estaba teniendo este problema y lo resolví usando barras dobles:

        Logger.loggerInfo = new Winston.Logger({
            level: 'info',
            transports: [
                new Winston.transports.File({
                    filename: process.cwd() + '\\logs\\info.log',
                    timestamp: true
                })
            ]
        });

Hice varias pruebas con varios mecanismos de registro avanzados (incluido winston) y parece que los registradores no pueden escribir en el archivo si realiza una salida limpia (process.exit (0)).
Eliminar la salida limpia resuelve el problema.

@fvuilleumier tiene razón, gracias, sin embargo, la eliminación no es conveniente para las herramientas CLI, por ejemplo. Pero usar process.exitCode = 0 (o cualquier código) funciona perfectamente porque permite que el ciclo termine con gracia.

Hay un ejemplo para crear un archivo.

const filename = path.join(__dirname, 'created-logfile.log');

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename })
  ]
});

crear ejemplo de archivo

@fvuilleumier @nicosommi, pero ¿qué pasa si quiero salir de la aplicación después de que haya registrado un error? ¿Conseguiste encontrar un paseo?

@danbrownbox al final del día, un script js es solo un archivo que se ejecuta hasta el final, por lo que si desea salir de la aplicación después de alguna línea en particular, solo necesita construir el flujo de ejecución adecuado en su función

No funciona con la ruta relativa en mi mac, pero crea un archivo si se proporciona la ruta absoluta.

No importa si estoy usando absoluto o relativo. No me funciona cuando agrego el transporte de forma dinámica.

function createLogFile(appName) {
  pathUtils.ensureDirectoryExists('logs');
  pathUtils.ensureDirectoryExists(`logs/${appName}`);
  winston.add(winston.transports.File, {
    level: 'debug',
    //filename: `logs/${appName}/export-${Date.now()}.log`,
    //filename: `${__dirname}/logs/${appName}/export-${Date.now()}.log`,
    filename: `${process.cwd()}/logs/${appName}/export-${Date.now()}.log`,
    json: false,
    formatter: _formatLog()
  });
}

Sin embargo, si agrego este transporte en createLogger() , funciona con absoluto.

Esta respuesta me funciona.
Aquí está mi código:
`` ``
const winston = require ('winston');
const logDir = 'registros';
const fs = require ('fs');

if (! fs.existsSync (logDir)) {
fs.mkdirSync (logDir);
}

const logger = winston.createLogger ({
nivel: 'info',
formato: winston.format.json (),
exitOnError: falso,
transportes: [
new (require ('winston-daily-rotate-file')) ({
nombre de archivo: ${logDir}/logs.log ,
datePattern: 'AAAA-MM-DD-HH',
zippedArchive: verdadero,
nivel: 'tonto'
}),
new (require ('winston-daily-rotate-file')) ({
nombre de archivo: ${logDir}/errors.log ,
datePattern: 'AAAA-MM-DD-HH',
zippedArchive: verdadero,
nivel: 'error'
})
],
});

exportar {registrador};

logger.silly ('prueba tonta');
logger.info ('prueba de información');
logger.warn ('advertencia de prueba');
logger.error ('prueba de error');
`` ``

Soy el autor original de este problema (cuenta diferente). Regresé ... porque tengo el mismo problema y olvidé cómo lo resolví 🤣

¿Está utilizando el último [email protected] ? ¿Se aseguró de que exista el directorio donde desea que esté el archivo de registro ( winston no creará directorios para usted, aunque aceptamos un PR que lo haga una opción o incluso el comportamiento predeterminado)? Probablemente deberíamos cerrar este problema anterior una vez que podamos ponerlo en funcionamiento nuevamente :)

Estaría dispuesto a trabajar en un PR para esto en mi tiempo libre, así que déjamelo 👍

¡Frio! 👍 Para cerrar esto, podemos rastrear las cosas del directorio en # 1465. Los problemas separados deben probarse con master y abrirse como nuevos problemas si los problemas persisten. ¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

Buzut picture Buzut  ·  3Comentarios

kjin picture kjin  ·  3Comentarios

JaehyunLee-B2LiNK picture JaehyunLee-B2LiNK  ·  3Comentarios

Infinitay picture Infinitay  ·  3Comentarios

KingRial picture KingRial  ·  3Comentarios