我使用Rails 5并需要创建自定义Rails记录器。
例如,在控制器的某些地方,我想要进行此日志记录调用:
{
"level": "info",
"ts": 1507972311.8043,
"caller": "controller/api/v2/news.rb:101",
"msg": "Event happened",
"app": "My App",
"env": "production",
"context": {
"event_id": "1234567",
"email": "example@gmail.com",
"first_name": "John",
"last_name": "Doe"
}
}
后者在我的日志文件中我希望看到这样的内容:
{{1}}
这可能吗?如何同时对所有日志级别(信息/调试/错误)执行此操作?
答案 0 :(得分:1)
创建自己的包装器:
class LocalLogger
def self.log(*args)
new.log(*args)
end
def logger
Rails.logger
end
delegate :info, :debug, :warn, :error, to: :logger
def log(level: :info, payload)
send(level, payload.inspect)
end
end
LocalLogger.log level: :warn, {foo: bar}
修改log
方法以根据需要进行操作。
然而,避免过于聪明的诱惑 - 默认的记录器行为非常好,并且会像大多数其他开发人员所期望的那样行事。
答案 1 :(得分:0)
最好的解决方案是声明自己的Logger#formatter
:
Rails.logger.
instance_variable_get(:@logger).
instance_variable_get(:@log).
formatter = proc do |severity, datetime, progname, msg|
DO WHATEVER YOU WANT HERE
end