32

是否有写入和解析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"},

因此,您必须对如何以解析器可以处理它们的方式构造日志文件有一些约定。最简单的事情是“每行一个日志消息对象,字符串值中的换行符被转义”。有没有现成的标准和工具?

4

2 回答 2

27

您不会为每个 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/

于 2013-06-21T22:46:21.400 回答
0

gemlog_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

完整示例代码:示例

于 2016-09-08T07:49:07.870 回答