Формат для записи файла журнала JSON?

Существуют ли какие-либо стандарты формата для записи и анализа файлов журнала JSON?

Проблема, которую я вижу, заключается в том, что у вас не может быть "чистый" файл журнала JSON, так как вам нужны соответствующие скобки, а запятые запрещены. Поэтому, хотя приложение может быть написано следующим образом, оно не может быть проанализировано стандартными анализаторами JSON:

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

Таким образом, вы должны иметь некоторые соглашения о ho, чтобы структурировать ваши файлы журналов таким образом, чтобы парсер мог их обрабатывать. Проще всего было бы "один объект сообщения журнала на строку, символы новой строки в строковых значениях экранированы". Существуют ли существующие стандарты и инструменты?

Ответы

Ответ 1

Вы не собираетесь писать ни одного объекта JSON на FILE, вы собираетесь написать объект JSON на LINE. Затем каждую строку можно разобрать отдельно. Вам не нужно беспокоиться о конечных запятых и иметь целый набор объектов, заключенных в скобки и т.д. См. http://blog.nodejs.org/2012/03/28/service-logging-in-json-with-bunyan/ для более подробного объяснения того, что это может выглядите.

Также ознакомьтесь с Fluentd http://fluentd.org/ для аккуратного набора инструментов для работы.

Ответ 2

gem log_formatter - это выбор ruby, как группа форматирования, теперь поддерживает json formatter для ruby ​​и log4r.

просто указать для рубина.

gem 'log_formatter'

require 'log_formatter'
require 'log_formatter/ruby_json_formatter'

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

результат

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

для 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'} )

Предварительное использование: README

Полный код примера: examples