1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Add option to write logs to a file

This commit is contained in:
Thorsten Ball 2012-12-11 12:32:22 +01:00
parent b9fc720127
commit d2c2da6be9
4 changed files with 75 additions and 10 deletions

View file

@ -56,15 +56,12 @@ module Sidekiq
def parse(args=ARGV)
@code = nil
Sidekiq.logger
cli = parse_options(args)
config = parse_config(cli)
options.merge!(config.merge(cli))
Sidekiq.logger.level = Logger::DEBUG if options[:verbose]
Celluloid.logger = nil unless options[:verbose]
initialize_logger
validate!
write_pid
boot_system
@ -200,6 +197,10 @@ module Sidekiq
opts[:config_file] = arg
end
o.on '-L', '--logfile PATH', "path to writable logfile" do |arg|
opts[:logfile] = arg
end
o.on '-V', '--version', "Print version and exit" do |arg|
puts "Sidekiq #{Sidekiq::VERSION}"
die(0)
@ -215,6 +216,17 @@ module Sidekiq
opts
end
def initialize_logger
if options[:logfile]
Sidekiq.logger = Sidekiq::Logging.new_file_logger(options[:logfile])
else
Sidekiq.logger
end
Sidekiq.logger.level = Logger::DEBUG if options[:verbose]
Celluloid.logger = nil unless options[:verbose]
end
def write_pid
if path = options[:pidfile]
File.open(path, 'w') do |f|

View file

@ -25,13 +25,12 @@ module Sidekiq
end
end
def self.new_file_logger(file_path)
initialize_logger(file_path)
end
def self.logger
@logger ||= begin
log = Logger.new(STDOUT)
log.level = Logger::INFO
log.formatter = Pretty.new
log
end
@logger ||= initialize_logger(STDOUT)
end
def self.logger=(log)
@ -42,5 +41,13 @@ module Sidekiq
Sidekiq::Logging.logger
end
private
def self.initialize_logger(log_target)
log = Logger.new(log_target)
log.level = Logger::INFO
log.formatter = Pretty.new
log
end
end
end

View file

@ -3,6 +3,7 @@
:environment: xzibit
:require: ./test/fake_env.rb
:pidfile: /tmp/sidekiq-config-test.pid
:logfile: /tmp/sidekiq.log
:concurrency: 50
:queues:
- [<%="very_"%>often, 2]

View file

@ -83,6 +83,47 @@ class TestCli < MiniTest::Unit::TestCase
Sidekiq.logger.level = old
end
describe 'with logfile' do
before do
@old_logger = Sidekiq.logger
@tmp_log_path = '/tmp/sidekiq.log'
end
after do
Sidekiq.logger = @old_logger
Sidekiq.options.delete(:logfile)
File.unlink @tmp_log_path if File.exists?(@tmp_log_path)
end
it 'sets the logfile path' do
@cli.parse(['sidekiq', '-L', @tmp_log_path, '-r', './test/fake_env.rb'])
assert_equal @tmp_log_path, Sidekiq.options[:logfile]
end
it 'creates and writes to a logfile' do
@cli.parse(['sidekiq', '-L', @tmp_log_path, '-r', './test/fake_env.rb'])
Sidekiq.logger.info('test message')
assert_match /test message/, File.read(@tmp_log_path), "didn't include the log message"
end
it 'appends messages to a logfile' do
File.open(@tmp_log_path, 'w') do |f|
f.puts 'already existant log message'
end
@cli.parse(['sidekiq', '-L', @tmp_log_path, '-r', './test/fake_env.rb'])
Sidekiq.logger.info('test message')
log_file_content = File.read(@tmp_log_path)
assert_match /already existant/, log_file_content, "didn't include the old message"
assert_match /test message/, log_file_content, "didn't include the new message"
end
end
describe 'with pidfile' do
before do
@tmp_file = Tempfile.new('sidekiq-test')
@ -134,6 +175,10 @@ class TestCli < MiniTest::Unit::TestCase
assert_equal '/tmp/sidekiq-config-test.pid', Sidekiq.options[:pidfile]
end
it 'sets logfile' do
assert_equal '/tmp/sidekiq.log', Sidekiq.options[:logfile]
end
it 'sets queues' do
assert_equal 2, Sidekiq.options[:queues].count { |q| q == 'very_often' }
assert_equal 1, Sidekiq.options[:queues].count { |q| q == 'seldom' }