【问题标题】:Access to Delayed::Worker instance访问 Delayed::Worker 实例
【发布时间】:2013-08-22 00:44:17
【问题描述】:

我想访问Delayed::Worker 实例以调用say 以将一些消息保存在delayed_log 文件中。有什么简单的方法可以实现这种行为吗?

class SomeDelayedJob
    def perform
        worker = __?__ # Delayed::Worker instance which called that perform method
        worker.say('going to do x')
        do_x()
    end
end

【问题讨论】:

    标签: ruby delayed-job


    【解决方案1】:

    你最好的选择是使用

    Delayed::Worker.logger.[info|error|warn|debug]“要做x”

    有一些格式:)

    因为 say 在内部使用相同的 logger 对象

    编辑

    Delayed::Worker.logger.[info|error|warn|debug] "#{Process.pid} at #{Time.now} => 要做 x" 希望对您有所帮助

    【讨论】:

    • 我知道,我现在正在使用它...但是 Worker#say 也会格式化这些消息,包括工人 ID 和时间。我可以自己格式化时间(不是 DRY),但前者更重要,例如。当我想查看特定工作人员按顺序执行的操作时。
    • 是的,我知道,因此我提到了格式化,但如果您担心进程 ID,您只需添加 Process.pid 我想这会严重影响您调用 say 时的需求我不认为这可能我也可能是错的
    • 用我在评论中提到的内容编辑了答案,我能尽最大努力帮助抱歉
    • 这是相当“hacky”的方式,我已经编写了模块并将其包含在所有作业中:module Logging def say(text, log_level=Logger::INFO) text = "#{Time.now. strftime('%FT%T%z')}: [Worker(pid:#{Process.pid})] #{text}" Delayed::Worker.logger.add(log_level, text) end end
    猜你喜欢
    • 2017-08-07
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2017-06-14
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多