# module : exa/logger # copyright : PRAGMA Publishing On Demand # version : 1.01 - 2002/2003 # author : Hans Hagen # # project : eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-pod.com / www.pragma-ade.com require 'thread' module EXA # The next calls are valid: # # @log.report('a','b','c', 'd') # @log.report('a','b',"c #{d}") # @log.report("a b c #{d}") # # Keep in mind that "whatever #{something}" is two times faster than # 'whatever ' + something or ['whatever',something].join and that # when verbosity is not needed the following is much faster too: # # @log.report('a','b','c', 'd') if @log.verbose? # @log.report('a','b',"c #{d}") if @log.verbose? # @log.report("a b c #{d}") if @log.verbose? # # The last three cases are equally fast when verbosity is turned off. # Under consideration: verbose per instance class ExaLogger @@length = 0 @@verbose = false def initialize(tag=nil,length=0,verbose=false) @tag = tag || '' @@verbose = @@verbose || verbose @@length = @tag.length if @tag.length > @@length @@length = length if length > @@length end def report(*str) begin case str.length when 0 print("\n") return true when 1 message = str.first else message = [str].flatten.collect{|s| s.to_s}.join(' ').chomp end if @tag.empty? then print("#{message}\n") else # try to avoid too many adjustments @tag = @tag.ljust(@@length) unless @tag.length == @@length print("#{@tag} | #{message}\n") end rescue end return true end def reportlines(*str) unless @tag.empty? then @tag = @tag.ljust(@@length) unless @tag.length == @@length end report([str].flatten.collect{|s| s.gsub(/\n/,"\n#{@tag} | ")}.join(' ')) end def debug(*str) report(str) if @@verbose end def error(*str) if ! $! || $!.to_s.empty? then report(str) else report(str,$!) end end def verbose @@verbose = true end def silent @@verbose = false end def verbose? @@verbose end # attr_reader :tag # alias fatal error # alias info debug # alias warn debug # alias debug? :verbose? end end