Rails 6 中 Logger 和 ActiveSupport::Logger 之间的区别

Mas*_*ano 8 ruby logging ruby-on-rails

Rails(具体来说,Rails 6)定义了 ActiveSupport::Logger,根据文档和源代码,它似乎是Logger(Ruby 标准库之一)的包装器。

\n

然而,在截至 2020 年 10 月的 Rails 6.0当前官方 Rails 参考中,配置文件中使用了标准 Logger。(也许它曾经是 ActiveSupport::Logger?)

\n

现在,我想在log/development.log配置文件中指定与默认(在开发环境中)不同的日志文件文件名(例如,config/environments/development.rb)。做

\n
config.logger = Logger.new(\'log/my_log_file.log\')\n
Run Code Online (Sandbox Code Playgroud)\n

够了吗?或者,使用 ActiveSupport::Logger 更好吗?如果是这样,有什么区别?

\n

请注意,默认情况下,config/environments/development.rb没有定义有关日志文件名称的要遵循或修改的设置。不过,log/development.log它是在开发环境中自动创建的,因此必须在某个不起眼的地方定义它。

\n

[编辑]这个答案暗示了我的表达方式。我确认它似乎适用于我的环境。但没有推理为什么so\xe2\x80\xa6 ActiveSupport::Logger是错误的?

\n

Roc*_*etR 4

正如您在问题中所解释的,ActiveSupport::Logger确实是标准的包装器Loggerhttps://github.com/rails/rails/blob/v6.1.4.1/activesupport/lib/active_support/logger.rb),并且是一个相当薄的一。

主要区别在于

  • AS::Logger配置默认日志格式化程序和
  • 提供了一种silence暂时提高日志级别的方法,从而在块的持续时间内“静默”低于该级别的日志记录。它似乎还包含用于链接多个记录器的工具(broadcast类方法)。

AS::Logger除非配置中指定了其他内容,否则Rails 会使用它。他们目前在文档中提到了该类:

Rails 使用 ActiveSupport::Logger 类来写入日志信息。

后来他们继续Logger在代码示例中使用该标准。可能只是为了说明目的。

使用其中之一取决于您是否需要默认格式化程序和静音。如果不这样做,Logger也可以正常工作,并且还可以节省一点开销。或者您可以更喜欢AS::Logger,因为它更通用。