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éé.
+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 })
]
});
@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!
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)