我有一个基于 Rails 3.2 的应用程序,它使用 Sidekiq 2.12 运行后台作业。Sidekiq 作业可以调用与交互式 Rails 应用程序相同的方法。我想要在从 Sidekiq 调用时记录到 Sidekiq 日志并在从 Rails 调用时记录到 Rails 日志的方法。我正在寻找一种干净的方法来做到这一点,但到目前为止都是空的。
在这两种环境中,Sidekiq::Logging.logger
和Rails.logger
都已定义并且可以工作。
- 我不想在每次记录尝试时检查调用堆栈以选择正确的记录器。
- 我不想将日志对象作为函数参数传递给可能从 Sidekiq 和 Rails 调用的每个函数。
我认为正确的做法可能是在启动过程中让 Sidekiq 用它的记录器替换 Rails 记录器,然后始终登录到 Rails 记录器,但是我找不到在 Rails 记录器设置后运行的初始化程序挂钩但在 Sidekiq 作业开始之前并且仅由 Sidekiq 运行。
有这样的钩子吗?如果是这样,请告诉我。如果没有,请提供有关如何基于 Sidekiq vs Rails 运行环境干净地重定向日志输出的其他建议。