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