diff --git a/lib/qless/worker.rb b/lib/qless/worker.rb index c23593a8..e66f2443 100644 --- a/lib/qless/worker.rb +++ b/lib/qless/worker.rb @@ -10,9 +10,14 @@ class Worker def initialize(client, job_reserver, options = {}) @client, @job_reserver = client, job_reserver @shutdown = @paused = false + self.very_verbose = options[:very_verbose] self.verbose = options[:verbose] self.run_as_single_process = options[:run_as_single_process] + self.output = options.fetch(:output, $stdout) + + output.puts "\n\n\n" if verbose || very_verbose + log "Instantiated Worker" end # Whether the worker should log basic info to STDOUT @@ -26,6 +31,10 @@ def initialize(client, job_reserver, options = {}) # This should only be true in a dev/test environment attr_accessor :run_as_single_process + # An IO-like object that logging output is sent to. + # Defaults to $stdout. + attr_accessor :output + # Starts a worker based on ENV vars. Supported ENV vars: # - REDIS_URL=redis://host:port/db-num (the redis gem uses this automatically) # - QUEUES=high,medium,low or QUEUE=blah @@ -179,10 +188,10 @@ def register_signal_handlers # Log a message to STDOUT if we are verbose or very_verbose. def log(message) if verbose - puts "*** #{message}" + output.puts "*** #{message}" elsif very_verbose time = Time.now.strftime('%H:%M:%S %Y-%m-%d') - puts "** [#{time}] #$$: #{message}" + output.puts "** [#{time}] #$$: #{message}" end end diff --git a/spec/unit/worker_spec.rb b/spec/unit/worker_spec.rb index 4ed74da2..d1bf75cb 100644 --- a/spec/unit/worker_spec.rb +++ b/spec/unit/worker_spec.rb @@ -361,7 +361,7 @@ def with_env_vars(vars = {}) with_env_vars do orig_new = Worker.method(:new) Worker.should_receive(:new) do |client, reserver, options = {}| - worker = orig_new.call(client, reserver, options) + worker = orig_new.call(client, reserver, options.merge(:output => StringIO.new)) worker.verbose.should be_false worker.very_verbose.should be_false worker.run_as_single_process.should be_false @@ -377,7 +377,7 @@ def with_env_vars(vars = {}) with_env_vars 'VERBOSE' => '1' do orig_new = Worker.method(:new) Worker.should_receive(:new) do |client, reserver, options = {}| - worker = orig_new.call(client, reserver, options) + worker = orig_new.call(client, reserver, options.merge(:output => StringIO.new)) worker.verbose.should be_true worker.very_verbose.should be_false worker.run_as_single_process.should be_false @@ -393,7 +393,7 @@ def with_env_vars(vars = {}) with_env_vars 'VVERBOSE' => '1' do orig_new = Worker.method(:new) Worker.should_receive(:new) do |client, reserver, options = {}| - worker = orig_new.call(client, reserver, options) + worker = orig_new.call(client, reserver, options.merge(:output => StringIO.new)) worker.verbose.should be_false worker.very_verbose.should be_true worker.run_as_single_process.should be_false