Формат для записи файла журнала 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