2012-05-22 3 views
15

Esistono standard di formato per la scrittura e l'analisi dei file di registro JSON?Formato per scrivere un file di registro JSON?

Il problema che vedo è che non è possibile avere un file di registro JSON "puro" poiché sono necessarie parentesi corrispondenti e virgole finali vietate. Così, mentre il seguito può essere scritta da un'applicazione, non può essere analizzato da parser JSON standard:

[{date:'2012-01-01 02:00:01', severity:"ERROR", msg:"Foo failed"}, 
{date:'2012-01-01 02:04:02', severity:"INFO", msg:"Bar was successful"}, 
{date:'2012-01-01 02:10:12', severity:"DEBUG", msg:"Baz was notified"}, 

quindi è necessario avere alcune convenzioni di Ho per strutturare i file di registro in un modo che un parser in grado di elaborare loro. La cosa più semplice sarebbe "un oggetto messaggio di registro per riga, i caratteri di nuova riga nei valori stringa vengono sfuggiti". Esistono standard e strumenti esistenti?

+0

È possibile avviare il file con '[' e completalo con '{}]'. Ma, come hanno sottolineato alcune delle risposte, JSON non è un formato "scorrevole". – Penz

+0

** Vedere anche: ** https://github.com/michaeltandy/log4j-json – dreftymac

risposta

14

Non scriverai un singolo oggetto JSON per FILE, scriverò un oggetto JSON per LINE. Ogni riga può quindi essere analizzata individualmente. Non è necessario preoccuparsi delle virgole finali e disporre dell'intero insieme di oggetti racchiusi tra parentesi, ecc. Vedere http://blog.nodejs.org/2012/03/28/service-logging-in-json-with-bunyan/ per una spiegazione più dettagliata di come può essere.

Controllare anche Fluentd http://fluentd.org/ per un set di strumenti pulito con cui lavorare.

+0

Ma scrivendo oggetti JSON per riga, senza virgole e senza parentesi graffe, ** NON È più JSON **. Hai creato qualcos'altro, qualcosa che nessun interprete JSON potrà mai capire. Qualcosa che non dovrebbe essere chiamato JSON. – simbolo

+6

Come ho già detto, il JSON deve essere interpretato su base per-line. Non sto suggerendo di ingurgitare l'intero file di log come un gigantesco blob JSON, che diventerebbe molto più grande e metterebbe in ginocchio la maggior parte degli interpreti JSON dato che dovevano creare un sacco di oggetti per questo. Invece, analizzalo per riga e poi puoi avere JSON perfettamente valido su ogni riga del file. Quindi cosa succede se l'intero file non è JSON valido come un intero grande oggetto? Non lo vorresti, comunque. – HerbCSO

0

gem log_formatter è la scelta rubino, come il gruppo formattatore, ora supporta JSON formattatore per ruby ​​e log4r.

semplice da dichiarare per rubino.

gem 'log_formatter' 

require 'log_formatter' 
require 'log_formatter/ruby_json_formatter' 

logger.debug({data: "test data", author: 'chad'}) 

risultato

{ 
    "source": "examples", 
    "data": "test data", 
    "author": "chad", 
    "log_level": "DEBUG", 
    "log_type": null, 
    "log_app": "app", 
    "log_timestamp": "2016-08-25T15:34:25+08:00" 
} 

per log4r:

require 'log4r' 
require 'log_formatter' 
require 'log_formatter/log4r_json_formatter' 

logger = Log4r::Logger.new('Log4RTest') 
outputter = Log4r::StdoutOutputter.new(
    "console", 
    :formatter => Log4r::JSONFormatter::Base.new 
) 
logger.add(outputter) 

logger.debug({data: "test data", author: 'chad'}) 

utilizzo Advance: README

pieno Codice Esempio: examples