如何将 Rails 日志消息自定义为 JSON 格式
How to customize Rails log messages to JSON format
我需要在我的 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 格式。
您可以配置rails来指定您自己的日志格式化程序:
config.log_formatter defines the formatter of the Rails logger. This option defaults to an instance of ActiveSupport::Logger::SimpleFormatter for all modes except production, where it defaults to Logger::Formatter.
您可以提供自己的class来输出日志信息:
class MySimpleFormatter < ActiveSupport::Logger::SimpleFormatter
def call(severity, timestamp, _progname, message)
{
type: severity,
time: timestamp,
message: message
}.to_json
end
end
要配置新的 class,您需要添加配置行:
config.log_formatter = MySimpleFormatter.new
我需要在我的 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 格式。
您可以配置rails来指定您自己的日志格式化程序:
config.log_formatter defines the formatter of the Rails logger. This option defaults to an instance of ActiveSupport::Logger::SimpleFormatter for all modes except production, where it defaults to Logger::Formatter.
您可以提供自己的class来输出日志信息:
class MySimpleFormatter < ActiveSupport::Logger::SimpleFormatter
def call(severity, timestamp, _progname, message)
{
type: severity,
time: timestamp,
message: message
}.to_json
end
end
要配置新的 class,您需要添加配置行:
config.log_formatter = MySimpleFormatter.new