【问题标题】:How to customize Rails log messages to JSON format [closed]如何将 Rails 日志消息自定义为 JSON 格式 [关闭]
【发布时间】:2015-04-24 18:39:09
【问题描述】:

我需要在我的 Rails 应用程序中将日志消息自定义为 JSON 格式。

为了说明,目前我的应用程序生成的日志消息如下所示:

I, [2015-04-24T11:52:06.612993 #90159]  INFO -- : Started GET "/time_entries" for ::1 at 2015-04-24 11:52:06 -0400

因此,上面一行的日志消息会写入我的日志。

我需要将此格式更改为 JSON。如何使日志输出的格式与以下示例完全相同?

{
  "type" : "info",
  "time" : "2015-04-24T11:52:06.612993",
  "message" : "Started GET "/time_entries" for ::1 at 2015-04-24 11:52:06 -0400"
}

注意:它不需要像我的示例那样漂亮地打印出来,它只需要具有 JSON 格式即可。

【问题讨论】:

    标签: ruby-on-rails json logstash


    【解决方案1】:

    您可以配置 rails 以指定您自己的日志格式化程序:

    config.log_formatter 定义 Rails 记录器的格式化程序。对于除生产之外的所有模式,此选项默认为 ActiveSupport::Logger::SimpleFormatter 的实例,其中默认为 Logger::Formatter。

    您可以提供自己的类来输出日志信息:

    class MySimpleFormatter < ActiveSupport::Logger::SimpleFormatter
      def call(severity, timestamp, _progname, message)
        { 
          type: severity,
          time: timestamp,
          message: message
        }.to_json
      end
    end
    

    要配置你的新类,你需要添加一个配置行:

    config.log_formatter = MySimpleFormatter.new
    

    【讨论】:

    • 你会把MySimpleFormatter代码放在哪里?
    • Rails 可以访问的任何地方:例如lib/my_simple_formatter.rb
    • 太好了,谢谢@Shadwell。
    • 这里有一些使用 Lograge 和 Airbrake 的东西,因此您可以完整地记录信息和错误。在配置/初始化器中:config/initializers/json_logger.rb
    猜你喜欢
    • 2022-07-04
    • 2020-04-15
    • 2014-08-13
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多