2012-05-22 14 views
15

¿Existen estándares de formato para escribir y analizar archivos de registro JSON?¿Formato para escribir un archivo de registro JSON?

El problema que veo es que no puede tener un archivo de registro JSON "puro" ya que necesita los paréntesis correspondientes y las comas finales están prohibidas. Así, mientras que el siguiente puede ser escrito por una aplicación, no se puede analizar mediante analizadores JSON estándar:

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

Por lo que debe tener algunas convenciones sobre ho de estructurar los archivos de registro en una forma que puede procesar un analizador ellos. Lo más fácil sería "un objeto de mensaje de registro por línea, se escapan las nuevas líneas en los valores de cadena". ¿Existen estándares y herramientas existentes?

+0

Puede iniciar el archivo con '[' y completarlo con '{}]'. Pero, como señalaron algunas de las respuestas, json no es un formato "transmisible". – Penz

+0

** Vea también: ** https://github.com/michaeltandy/log4j-json – dreftymac

Respuesta

14

No va a escribir un solo objeto JSON por ARCHIVO, va a escribir un objeto JSON por LÍNEA. Cada línea puede ser analizada individualmente. No necesita preocuparse por las comillas finales y tener todo el conjunto de objetos entre corchetes, etc. Consulte http://blog.nodejs.org/2012/03/28/service-logging-in-json-with-bunyan/ para obtener una explicación más detallada de cómo se ve.

Consulte también Fluentd http://fluentd.org/ para obtener un conjunto de herramientas ordenado para trabajar.

+0

Pero escribir objetos JSON por línea, sin comas, y sin incluir corchetes, ** NO ES JSON ** nunca más. Has creado algo más, algo que ningún intérprete JSON jamás podrá entender. Algo que no debería llamarse JSON. – simbolo

+6

Como dije, el JSON se debe interpretar por línea. No estoy sugiriendo que sorbe todo el archivo de registro como una burbuja gigante de JSON, que se pondría en forma y haría que la mayoría de los intérpretes de JSON se arrodillaran, ya que tendrían que crear muchos objetos para eso. En cambio, analícelo por línea y luego puede tener JSON perfectamente válido en cada línea del archivo. Entonces, ¿qué pasa si el archivo completo no es JSON válido como un objeto grande? No querrías eso, de todos modos. – HerbCSO

0

gem log_formatter es la opción de ruby, ya que el grupo formateador, ahora es compatible con el formateador json para ruby ​​y log4r.

fácil de obtener para ruby.

gem 'log_formatter' 

require 'log_formatter' 
require 'log_formatter/ruby_json_formatter' 

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

resultado

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

para 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'}) 

uso Avance: README

Ejemplo de código completo: examples

Cuestiones relacionadas