我的Rails应用程序在Heroku中运行;最近,我们将Heroku LOG_LEVEL改为WARN,因为系统日志中充斥着大量不需要的信息Rails.logger.info。
目前,在Heroku我们有这样的:
LOG_LEVEL = WARN
在生产中。rb,仍然是
config.log_level = :info
config.log_formatter = ::Logger::Formatter.new
我们没有更改上面的配置,因为如果我们设置了LOG_LEVEL,则优先级是LOG_LEVEL。因此,使用上面的配置,如果我们设置Rails.logger.info "Hello world,"
,则不会起作用,因为记录器将只处理重要性等于或高于警告的日志。
所以我们尝试了另一种方法。
已创建名为custom_logger.rb
的新初始值设定项;我们把
$INFO_LOGGER = Rails.logger.dup
$INFO_LOGGER.level = :info
然后在任何我们想使用info的地方,我们只需要调用$INFO_LOGGER.info "Hello World,"
这个打印
这是一种正确的方法吗,就像使用全局变量一样?
2条答案
按热度按时间laawzig21#
这是一种正确的方法吗,就像使用全局变量一样?
这个问题可能被认为是基于观点的,所以在我看来我不推荐它。另外,标题中提出的问题是关于自定义日志记录器的,虽然我们可以实现一个自定义日志记录器来简化请求,但我会建议一个更简单的解决方案,它仍然会准确地记录您想要的内容,到当前日志文件,而不需要自定义日志记录器,辅助日志记录器,或任何类型的全局变量。
我的建议:
Rails默认使用
ActiveSupport::Logger
,它实际上就是一个rubyLogger
。如果您总是希望记录一些消息,而不管
level
如何,则可以使用Logger#unknown
。根据
Logger
类的文档:级别:
UNKNOWN -应始终记录的未知消息。
记录器编号未知
记录UNKNOWN消息。无论记录程序的级别如何,都将打印此消息。
因此,您可以使用这一点,以您的优势,为您总是想显示的消息,同时仍然避免噪音的标准信息消息:
例如:
of1yzvn42#
你不想使用全局变量。
现在,您可以调用
MyLogger.info("this is a test message")
,它将在日志文件中输出消息,而不管是LOG_LEVEL
还是config.log_level = :info