Winston: Aucun fichier journal n'est créé

Créé le 26 mai 2016  ·  27Commentaires  ·  Source: winstonjs/winston

Système d'exploitation : Ubuntu 14.04
NodeJS : 6.2.0
Winston : 2.2.0

Le code suivant ne crée pas de fichier journal :

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');

Il se connecte bien au terminal :

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

Mais aucun fichier journal créé.

Commentaire le plus utile

Je viens de tomber sur ce problème. Le répertoire doit d'abord exister. winston créera de nouveaux fichiers pour vous, mais il ne semble pas créer de nouveaux répertoires pour vous (par exemple, vous devez créer le répertoire "logs" si vous essayez de vous connecter à un fichier situé dans logs/app.js)

Tous les 27 commentaires

+1

+1

+1

+1

Cela semble un problème dans le nœud 6 dans fs.stat()
Pour une raison quelconque, le rappel n'a jamais été exécuté 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()); 

Est-ce que c'est corrigé ?

J'ai corrigé ce problème en donnant le chemin absolu comme ça:
winston.add(winston.transports.File, { filename: ${__dirname}/logs/appError.log })

Cela fonctionne pour moi. J'ai eu un problème récemment sur un projet avec Winston en utilisant Atom dans lequel les fichiers .gitignore ne montraient pas dans le répertoire des fichiers du projet Atom en raison d'une mise à jour dans le paquet Arbo ... (Option: Masquer VCS Ignoré Des dossiers)

_Utilisation de Node 6.2.2 et Winston 2.2.0._

Code:

'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');

Crée un fichier app.log avec la sortie : {"level":"info","message":"Holla","timestamp":"2016-07-01T19:29:14.035Z"} et se connecte à la console avec 2016-07-01T19:29:14.034Z - info: Holla

Je viens de tomber sur ce problème. Le répertoire doit d'abord exister. winston créera de nouveaux fichiers pour vous, mais il ne semble pas créer de nouveaux répertoires pour vous (par exemple, vous devez créer le répertoire "logs" si vous essayez de vous connecter à un fichier situé dans logs/app.js)

Wish winston a vérifié si le dossier/répertoire de journal existe, puis créer un dossier/répertoire de journal s'il n'existe pas au démarrage. Je pense que fs peut le faire correctement?

+1

+1

+1

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

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

J'avais ce problème et le résous en utilisant des doubles barres obliques:

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

J'ai fait plusieurs tests avec plusieurs mécanismes de journalisation avancés (y compris Winston) et il semble que les enregistreurs ne soient pas capables d'écrire dans le fichier si vous effectuez une sortie propre (process.exit(0)).
La suppression de la sortie propre résout le problème.

@fvuilleumier vous avez raison, merci, mais la suppression n'est pas pratique pour les outils CLI, par exemple. Mais utiliser process.exitCode = 0 (ou n'importe quel code) fonctionne parfaitement car il permet à la boucle de se terminer en douceur.

Il y a un exemple pour créer un fichier

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

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

exemple de création de fichier

@fvuilleumier @nicosommi mais qu'en est-il si je veux quitter l'application après avoir enregistré une erreur ? Avez-vous réussi à trouver une promenade?

@danbrownbox à la fin de la journée, un script js est juste un fichier qui est exécuté jusqu'à la fin, donc si vous voulez quitter l'application après une ligne particulière, il vous suffit de créer le flux d'exécution approprié sur votre fonction

Ne fonctionne pas avec le chemin relatif sur mon mac, mais crée un fichier si le chemin absolu est fourni.

Que j'utilise l'absolu ou le relatif, cela n'a pas d'importance. Cela ne fonctionne pas pour moi lors de l'ajout dynamique du transport.

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()
  });
}

Cependant, si j'ajoute ce transport dans createLogger() cela fonctionne avec Absolute.

Cette réponse fonctionne pour moi.
Voici mon code :
````
const winston = require('winston');
const logDir = 'journaux';
const fs = require('fs');

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

const logger = winston.createLogger({
niveau : 'info',
format : winston.format.json(),
exitOnError : faux,
les transports: [
nouveau (require('winston-daily-rotate-file'))({
nom de fichier : ${logDir}/logs.log ,
modèle de date : 'AAAA-MM-JJ-HH',
zippedArchive : vrai,
niveau : 'idiot'
}),
nouveau (require('winston-daily-rotate-file'))({
nom de fichier : ${logDir}/errors.log ,
modèle de date : 'AAAA-MM-JJ-HH',
zippedArchive : vrai,
niveau : 'erreur'
})
],
});

exporter {enregistreur} ;

logger.silly('test idiot');
logger.info('test d'informations');
logger.warn('avertir le test');
logger.error('test d'erreur');
````

Je suis l'auteur original de ce numéro (compte différent). Je suis de retour ... car j'ai le même problème et j'ai oublié comment je l'ai résolu

Utilisez-vous le dernier [email protected] ? Vous êtes-vous assuré que le répertoire existe où vous voulez que le fichier journal soit ( winston ne créera pas de répertoires pour vous, bien que nous acceptions un PR en faisant une option ou même le comportement par défaut). Nous devrions probablement fermer cet ancien problème une fois que nous pourrons vous remettre en marche :)

Je serais prêt à travailler sur un PR pour cela pendant mon temps libre alors laissez-le moi

Frais! Pour clore ceci, nous pouvons suivre les éléments du répertoire dans #1465 . Des problèmes distincts doivent être testés par rapport à master et ouverts en tant que nouveaux problèmes si les problèmes persistent. Merci!

Cette page vous a été utile?
0 / 5 - 0 notes