Skip to content

Commit

Permalink
introducing the BrB.logger (replaces all puts/tputs and use @verbose
Browse files Browse the repository at this point in the history
…option to determine log-level); default logger to STDOUT; added basic test
  • Loading branch information
bsingr committed May 16, 2011
1 parent 269a973 commit 2cc9338
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 25 deletions.
3 changes: 2 additions & 1 deletion lib/brb.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require File.join(File.dirname(__FILE__), 'brb', 'logger.rb')
require File.join(File.dirname(__FILE__), 'brb', 'exception.rb')
require File.join(File.dirname(__FILE__), 'brb', 'event_machine.rb')
require File.join(File.dirname(__FILE__), 'brb', 'service.rb')
require File.join(File.dirname(__FILE__), 'brb', 'tunnel.rb')
require File.join(File.dirname(__FILE__), 'brb', 'tunnel.rb')
4 changes: 2 additions & 2 deletions lib/brb/event_machine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def open(uri, klass, opts = {})
return q.pop

rescue Exception => e
puts e.backtrace.join("\n")
BrB.logger.error e.backtrace.join("\n")
raise "#{e} - #{uri}"
end
end
Expand All @@ -65,7 +65,7 @@ def open_server(uri, klass, opts = {})
max -= 1
port += 1
retry if max > 0
puts e.backtrace.join("\n")
BrB.logger.error e.backtrace.join("\n")
raise "#{e} - BrB Tcp Event machine Can not bind on #{host}:#{port}"
end

Expand Down
35 changes: 35 additions & 0 deletions lib/brb/logger.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
require "logger"

module BrB
class << self

# returns the default logger instance
def default_logger
Logger.new(STDOUT)
end

# set a custom logger instance
def logger=(custom_logger)
@@logger = custom_logger
end

# returns the logger instance
def logger
# use default logger if no custom logger is set
@@logger = default_logger unless defined? @@logger

# this overwrites the original method with a static definition
eval %Q{
def logger
@@logger
end
}
@@logger
end
end

# alias to BrB.logger
def logger
BrB.logger
end
end
8 changes: 4 additions & 4 deletions lib/brb/request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,17 +70,17 @@ def new_brb_in_request(meth, *args)
brb_send([ReturnCode, r, thread, idrequest])
rescue Exception => e
brb_send([ReturnCode, e, thread, idrequest])
tputs e.to_s
tputs e.backtrace.join("\n")
BrB.logger.error e.to_s
BrB.logger.error e.backtrace.join("\n")
#raise e
end
else

begin
(args.size > 0) ? @object.send(meth, *args) : @object.send(meth)
rescue Exception => e
tputs "#{e.to_s} => By calling #{meth} on #{@object.class} with args : #{args.inspect}"
tputs e.backtrace.join("\n")
BrB.logger.error "#{e.to_s} => By calling #{meth} on #{@object.class} with args : #{args.inspect}"
BrB.logger.error e.backtrace.join("\n")
raise e
end

Expand Down
16 changes: 6 additions & 10 deletions lib/brb/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,9 @@ class Service
@@uri = nil
@@em_signature = nil
@@verbose = false

class << self

private
def tputs(s)
puts s if @@verbose
end

public

# Start a server hosted on the object given,
Expand All @@ -23,12 +18,13 @@ def start_service(opts = {}, &block)
return if @@em_signature

@@verbose = opts[:verbose]
BrB.logger.level = @@verbose ? Logger::INFO : Logger::WARN

addr = opts[:uri] || "brb://#{opts[:host] || 'localhost'}:#{opts[:port] || 6200}"

tputs " [BrB] Start service on #{addr} ..."
BrB.logger.info " [BrB] Start service on #{addr} ..."
@@uri, @@em_signature = BrB::Protocol::open_server(addr, BrB::Tunnel::Handler, opts.merge(:block => block))
tputs " [BrB] Service started on #{@@uri}"
BrB.logger.info " [BrB] Service started on #{@@uri}"
end

def uri
Expand All @@ -39,7 +35,7 @@ def uri
def stop_service
return if !@@em_signature or !EM::reactor_running?

tputs " [BrB] Stop service on #{@@uri}"
BrB.logger.info " [BrB] Stop service on #{@@uri}"
sign = @@em_signature
q = Queue.new # Creation of a Queue for waiting server to stop
EM::schedule do
Expand All @@ -52,7 +48,7 @@ def stop_service

# Deprecated old method
def instance
puts "DEPRECATION WARNING: BrB::Service::instance is deprecated => Just use BrB::Service"
BrB.logger.warn "DEPRECATION WARNING: BrB::Service::instance is deprecated => Just use BrB::Service"
self
end
end
Expand Down
7 changes: 4 additions & 3 deletions lib/brb/tunnel.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ def initialize(opts = {})
super
@object = opts[:object]
@verbose = opts[:verbose]
BrB.logger.level = @verbose ? Logger::INFO : Logger::WARN
@timeout_rcv_value = opts[:timeout] || 30 # Currently not implemented due to the lack of performance of ruby Timeout
@close_after_timeout = opts[:close_after_timeout] || false
@uri = opts[:uri]
Expand All @@ -41,7 +42,7 @@ def initialize(opts = {})

# EventMachine Callback, called after connection has been initialized
def post_init
tputs " [BrB] Tunnel initialized on #{@uri}"
BrB.logger.info " [BrB] Tunnel initialized on #{@uri}"
@active = true
if @block
EM.defer do
Expand All @@ -58,7 +59,7 @@ def close_connection(after_writing = false)
# EventMachine unbind event
# The connection has been closed
def unbind
tputs ' [BrB] Tunnel service closed'
BrB.logger.info ' [BrB] Tunnel service closed'
@active = false
if @block
EM.defer do
Expand All @@ -69,7 +70,7 @@ def unbind

# Stop the service
def stop_service
tputs ' [BrB] Stopping Tunnel service...'
BrB.logger.info ' [BrB] Stopping Tunnel service...'
@active = false
EM.schedule do
close_connection
Expand Down
6 changes: 1 addition & 5 deletions lib/brb/tunnel/shared.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,14 @@
module BrB
module Tunnel
module Shared
def tputs(s)
puts s if @verbose
end

def make_proxy(r)
if r.is_a?(Array)
t = []
r.each do |obj|
t << if obj.is_a? Array
make_proxy(obj)
elsif !obj.is_a?(Symbol) and !obj.is_a?(String) and obj and !(Marshal::dump(obj) rescue nil)
#puts " - > Make proxy for : #{obj.class}"
#BrB.logger.debug " - > Make proxy for : #{obj.class}"
obj.to_s.to_sym
else
obj
Expand Down
35 changes: 35 additions & 0 deletions spec/brb/brb_logger_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
require 'spec_helper'

class CustomLogger
attr_accessor :level, :history
def initialize
@history = []
end
def info(msg)
@history << msg
end
alias :error :info
alias :warn :info
alias :debug :info
end

describe :brb_logger do
before(:each) do
@original_logger = BrB.logger
end

after(:each) do
BrB.logger = @original_logger
end

it 'should be assigned a default logger' do
BrB.logger.should_not be_nil
BrB.logger.class.should == Logger
end

it 'should be possible to use a custom logger' do
BrB.logger = CustomLogger.new
BrB.logger.info('foo')
BrB.logger.history.last.should == 'foo'
end
end

0 comments on commit 2cc9338

Please sign in to comment.