recorrer objeto mostrar leer formato externo estructura ejemplo datos crear con archivo json node.js winston

objeto - ¿Cómo podría un humano leer un archivo de registro de json winston?



mostrar datos json javascript (7)

Parece bueno para API''s, scripts y que no. Pero leer un rastro de la pila de winston json es muy difícil con un editor de texto. P.ej

{"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"}


¿Por qué no simplemente ejecutarlo a través de un formateador JSON en la línea de comandos ?

por ejemplo (ejemplo del enlace de arriba)

echo ''{ element0: "lorem", element1: "ipsum" }'' | python -mjson.tool

Una alternativa puede ser la construcción de un script de shell alrededor de la herramienta anterior (o quizás) jq para realizar un análisis de seguimiento de pila personalizado


Deberías probar winston-logs-display .

Salida de demostración:

También Log.io es una buena opción para esto. es compatible con el registro de Winston.


Es lento pero tu shell puede hacerlo, formatear, JSON coloreado.

./thing | ndjson

¿Cómo?

Ejecuta algún comando de formato JSON en cada línea, la sintaxis bash o zsh es:

./thing | while read in ; do echo "$in" | python -m json.tool ; done

Para los fish la sintaxis es

./thing | while read in; echo "$in" | python -mjson.tool; end #fish

Para que sea más extravagante, simplemente pip install pygments .

Define un alias práctico pp , por lo que ejecuta cat file.json | pp cat file.json | pp .

alias pp="python -mjson.tool | pygmentize -l js"

Y luego defina ndjson

alias ndjson=''while read in; do echo "$in" | pp; done''

Ahora puede escribir lo siguiente para obtener JSON con color y formato.

./thing | ndjson

(use funced y funcsave para definir alias en fish )


Pásalo a través de jq , que es como sed para JSON. P.ej:

jq . file.log


Parece que el bunyan de bunyan tiene características que le permiten filtrar y ver los registros json de una manera legible por humanos con un CLI .

$ node hi.js | bunyan -l warn [2013-01-04T19:08:37.182Z] WARN: myapp/40353 on banana.local: au revoir (lang=fr)


Si usa Keen.IO - su herramienta CLI puede cargar el JSON delimitado por la línea, entonces puede usar su ''Explorador'' para filtrar / ver eventos de registro.

keen events:add --collection myLogs --file winston-output.json


Simplemente configura la propiedad de "json" de transporte de archivos en falso, y obtendrás un registro legible. Lo mismo que ves en la consola.

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