浩文 联系 关于本站 登录 注册
  • 关注新浪微博:
  • 关注微信公众号:

Sidekiq Github wiki 中文文档

日志记录

commit信息:Updated Logging (markdown) | 提交者:mperham | 提交时间:2019-09-04 | 版本:75b7dba

Sidekiq 是一个多线程系统,这意味着许多事情会同时发生。为了在该环境下轻松的调试程序,Sidekiq使用定制的日志记录器来输出附加信息:

UTC Timestamp----------- PID------ Thread----- JobType--------- JID------------------------- More...
2019-08-31T15:36:07.569Z pid=82859 tid=11cy9br class=HardWorker jid=528f1b0ddc4a9d0690464fe4 INFO: start
2019-08-31T15:36:07.573Z pid=82859 tid=119pz7z class=HardWorker jid=b7f805c545c78770d30dc1fd elapsed=0.089 INFO: done
2019-08-31T15:36:07.573Z pid=82859 tid=119pz7z class=HardWorker jid=16925b0f545a15a75d391f3b INFO: start
2019-08-31T15:36:07.576Z pid=82859 tid=119py7b class=HardWorker jid=398d4bc5563b1f1b4cce846d elapsed=0.089 INFO: done
2019-08-31T15:36:07.585Z pid=82859 tid=11cy98z class=HardWorker jid=fe849e00b8371b33a1e8f16f elapsed=0.081 INFO: done
2019-08-31T15:36:07.586Z pid=82859 tid=119puzr class=HardWorker jid=7cdac3a6c25d13233bfb3f00 elapsed=0.076 INFO: done
2019-08-31T15:36:07.587Z pid=82859 tid=11cy8t7 class=HardWorker jid=ec7e77e8b1013659469d96fa elapsed=0.072 INFO: done

Sidekiq程序只输出日志到标准输出。这是现代守护程序应有的工作方式.

所有时间戳均为UTC。 时区糟透了。

写入日志

Workers可以使用logger

class YourWorker
  include Sidekiq::Worker

  def perform
    logger.info "Things are happening."
    logger.debug "Here's some info: #{hash.inspect}"
  end
end

日志重定向

从Sidekiq 6.0开始,Sidekiq不直接支持日志重定向。你的进程管理器应该具有重定向日志输出的方法,或者你可以使用shell重定向,例如,将Sidekiq的输出重定向到logger UNIX命令,以便将其带着'sidekiq'标签一起发送到syslog中(理想情况下,应该通过systemd完成)。

bundle exec sidekiq 2>&1 | logger -t sidekiq

这种方式将导致不能与Upstart一起工作。如果使用Upstart,请查看这个issue

在测试环境中轻量化日志记录

如果你想在你的测试环境中轻量化Sidekiq日志功能,请在测试设置中设置日志级别到ERROR或者FATAL:

require 'sidekiq/testing'
Sidekiq.logger.level = Logger::ERROR

默认记录器和详细信息

Sidekiq 默认使用Ruby的标准库Logger。因此,日志级别遵循stdlib文档

在生产环境中,INFO日志级别对需求来说或许太过冗余。为了使日志轻量化,以便使用更少的磁盘空间,可以调整日志级别到只显示WARN和 更高的级别:

Sidekiq.configure_server do |config|
  config.logger.level = Logger::WARN
end

格式化输出

Sidekiq的日志记录器拥有可配置的格式程序;你可以使用JSON格式选项,例如,你正在把输出的日志发送到Elasticache以便用来索引:

Sidekiq.configure_server do |config|
  config.log_formatter = Sidekiq::Logger::Formatters::JSON.new
end

结果:

$ bundle exec sidekiq
{"ts":"2019-09-01T22:34:59.778Z","pid":90069,"tid":"104v8ph","lvl":"INFO","msg":"Running in ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]"}
{"ts":"2019-09-01T22:34:59.778Z","pid":90069,"tid":"104v8ph","lvl":"INFO","msg":"See LICENSE and the LGPL-3.0 for licensing details."}
{"ts":"2019-09-01T22:34:59.778Z","pid":90069,"tid":"104v8ph","lvl":"INFO","msg":"Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org"}
{"ts":"2019-09-01T22:34:59.778Z","pid":90069,"tid":"104v8ph","lvl":"INFO","msg":"Booting Sidekiq 6.0.0 with redis options {:id=>\"Sidekiq-server-PID-90069\", :url=>nil}"}
{"ts":"2019-09-01T22:34:59.807Z","pid":90069,"tid":"104v8ph","lvl":"INFO","msg":"Starting processing, hit Ctrl-C to stop"}

有关详细信息,请参见sidekiq/logger

API 改动

老的Sidekiq::Logging类在Sidekiq 6.0中被移出。不应访问任何Sidekiq内部类来使用该日志记录器。请在Worker中直接使用logger,在其它的地方使用Sidekiq.logger

上一篇: 兼容Resque 下一篇: 信号