Cela semble bien pour les API, les scripts et autres. Mais la lecture d'une trace de pile Winston Json est très difficile avec un éditeur de texte. Par exemple.
{"level":"info","message":"starting","timestamp":"2014-05-14T15:45:44.334Z"}
{"date":"Wed May 14 2014 08:45:45 GMT-0700 (Pacific Daylight Time)","process":{"pid":8804,"uid":null,"gid":null,"cwd":"C:\\data\\mytool","execPath":"C:\\Program Files\\nodejs\\node.exe","version":"v0.10.21","argv":["node","C:\\data\\mytool\\server"],"memoryUsage":{"rss":45199360,"heapTotal":32171264,"heapUsed":15158096}},"os":{"loadavg":[0,0,0],"uptime":70496.6138252},"trace":[{"column":null,"file":null,"function":"Object.parse","line":null,"method":"parse","native":true},{"column":32,"file":"C:\\data\\mytool\\src\\status.js","function":"Request._callback","line":166,"method":"_callback","native":false},{"column":22,"file":"C:\\data\\mytool\\node_modules\\request\\request.js","function":"Request.self.callback","line":122,"method":"self.callback","native":false},{"column":17,"file":"events.js","function":"Request.EventEmitter.emit","line":98,"method":"EventEmitter.emit","native":false},{"column":14,"file":"C:\\data\\mytool\\node_modules\\request\\request.js","function":"","line":888,"method":null,"native":false},{"column":20,"file":"events.js","function":"Request.EventEmitter.emit","line":117,"method":"EventEmitter.emit","native":false},{"column":12,"file":"C:\\data\\mytool\\node_modules\\request\\request.js","function":"","line":839,"method":null,"native":false},{"column":20,"file":"events.js","function":"IncomingMessage.EventEmitter.emit","line":117,"method":"EventEmitter.emit","native":false},{"column":16,"file":"_stream_readable.js","function":null,"line":920,"method":null,"native":false},{"column":13,"file":"node.js","function":"process._tickCallback","line":415,"method":"_tickCallback","native":false}],"stack":["SyntaxError: Unexpected end of input"," at Object.parse (native)"," at Request._callback (C:\\data\\mytool\\src\\status.js:166:32)"," at Request.self.callback (C:\\data\\mytool\\node_modules\\request\\request.js:122:22)"," at Request.EventEmitter.emit (events.js:98:17)"," at Request.<anonymous> (C:\\data\\mytool\\node_modules\\request\\request.js:888:14)"," at Request.EventEmitter.emit (events.js:117:20)"," at IncomingMessage.<anonymous> (C:\\data\\mytool\\node_modules\\request\\request.js:839:12)"," at IncomingMessage.EventEmitter.emit (events.js:117:20)"," at _stream_readable.js:920:16"," at process._tickCallback (node.js:415:13)"],"level":"error","message":"uncaughtException: Unexpected end of input","timestamp":"2014-05-14T15:45:45.228Z"}
Définissez simplement la propriété "json" de transport de fichiers sur false, et vous obtiendrez un journal lisible par l'homme. Identique à la console.
var winston = require('winston');
var logger = new winston.Logger({
transports: [
new winston.transports.File({
json: false,
filename:'log.log'
}),
new winston.transports.Console()
],
exitOnError: false
});
logger.log('info', 'some msg');
Passez-le dans jq , ce qui ressemble à sed pour JSON. Par exemple.:
jq . file.log
Pourquoi ne pas simplement l'exécuter via un formateur JSON sur la ligne de commande ?
par exemple. (exemple du lien ci-dessus)
echo '{ element0: "lorem", element1: "ipsum" }' | python -mjson.tool
Une alternative peut consister à créer un script Shell autour de l'outil ci-dessus (ou peut-être) jq pour effectuer une analyse de trace de pile personnalisée.
Si vous utilisez Keen.IO -, leur outil CLI peut télécharger le JSON délimité par ligne, vous pouvez alors utiliser leur "Explorateur" pour filtrer/afficher les événements du journal.
keen events:add --collection myLogs --file winston-output.json
C'est lent, mais votre shell peut le faire, obtenir un JSON formaté et coloré.
./thing | ndjson
Vous exécutez une commande de formatage JSON sur chaque ligne. La syntaxe bash
ou zsh
est la suivante:
./thing | while read in ; do echo "$in" | python -m json.tool ; done
Pour fish
, la syntaxe est la suivante:
./thing | while read in; echo "$in" | python -mjson.tool; end #fish
Pour le rendre encore plus sophistiqué, il suffit de pip install pygments
.
Définissez un alias pratique pp
afin d'exécuter cat file.json | pp
.
alias pp="python -mjson.tool | pygmentize -l js"
Et ensuite définir ndjson
alias ndjson='while read in; do echo "$in" | pp; done'
Vous pouvez maintenant saisir ce qui suit pour obtenir un JSON formaté et coloré.
./thing | ndjson
(utilisez funced
et funcsave
pour définir un alias dans fish
)
Vous devriez essayer winston-logs-display .
Sortie de démonstration:
Aussi Log.io est une bonne option pour cela. il supporte winston log.