是否存在用于编写和解析JSON
日志文件的格式标准?
我看到的问题是,您不能有一个“纯” JSON
日志文件,因为您需要匹配的方括号,并且禁止使用逗号结尾。因此,尽管以下内容可能是由应用程序编写的,但无法通过标准JSON parsers:
[{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"},
因此,您必须对如何以解析器可以处理它们的方式构造日志文件有一些约定。最简单的事情是“每行一个日志消息对象,字符串值中的换行符被转义”。是否有任何现有的标准和工具?
您不会为每个FILE编写一个JSON对象,而是会为LINE编写一个JSON对象。然后可以单独解析每一行。您不必担心尾随逗号,并且整个对象都用方括号括起来,等等。有关其外观的详细说明,请参见http://blog.nodejs.org/2012/03/28/service-logging-in-json-with-bunyan/。
也请检查Fluentd http://fluentd.org/以使用一个整洁的工具集。
编辑:此格式现在称为JSONLines或jsonl
,如下面@Mnebuerquo所指出-参见http://jsonlines.org/
gem log_formatter
是ruby的选择,作为格式化程序组,现在支持ruby和log4r的json格式化程序。
很容易得到红宝石的陈述。
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