用于编写JSON日志文件的格式?

时间:2012-05-22 10:10:26

标签: json logging syntax standards

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

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

2 个答案:

答案 0 :(得分:17)

您不会为每个FILE编写单个JSON对象,您将为每个LINE编写一个JSON对象。然后可以单独解析每一行。您不必担心尾随逗号,并且用括号等括起整个对象集。有关此内容的更详细说明,请参阅http://blog.nodejs.org/2012/03/28/service-logging-in-json-with-bunyan/

另请查看流利http://fluentd.org/以获得一个可以使用的简洁工具集。

答案 1 :(得分:0)

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

for 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