lib/tlogger.rb in tlogger-0.8.0 vs lib/tlogger.rb in tlogger-0.21.0
- old
+ new
@@ -1,330 +1,11 @@
-
-
-require 'logger'
-require 'singleton'
-
require "tlogger/version"
+require_relative "tlogger/tlogger"
+require_relative "tlogger/logger_group"
+
+#
+# :nodoc:
+#
module Tlogger
class Error < StandardError; end
- # Your code goes here...
-
- #
- # Singleton object to facilitate tag management
- #
- class TloggerConf
- include Singleton
- attr_reader :active_tags, :scoped_tag, :blacklisted_tags, :show_source
- #GLOBAL_TAG = :global
- GLOBAL_TAG = ""
- INT_TAG = :tlogger
-
- def initialize
- @active_tags = []
- # tag added to black listed will not be printed out even the tag is added later in the code path
- @blacklisted_tags = []
- @disable_all_tags = false
- @auto_tag = false
- # todo
- # allow to redirect certain tag to specific output. tag: [<config>]
- @output_map = {}
- # if output_map is there, then there should be pre created log file with specific output defined in the map. [<config>] => log_instance
- @output_log = {}
- # show where is the log being printed out. Like auto_tag output
- @show_source = false
- # end todo
- end
-
- def show_source
- @show_source = true
- end
- alias_method :auto_tag_on, :show_source
-
- def hide_source
- @show_source = false
- end
- alias_method :auto_tag_off, :hide_source
-
- def is_show_source?
- @show_source
- end
- alias_method :is_auto_tag_on?, :is_show_source?
-
- #def auto_tag_on
- # @auto_tag = true
- #end
-
- #def auto_tag_off
- # @auto_tag = false
- #end
-
- #def is_auto_tag_on?
- # @auto_tag
- #end
-
- def activate_tag(tag)
- @active_tags << tag
- end
-
- def deactivate_tag(tag)
- @active_tags.delete(tag)
- end
-
- def blacklist_tag(tag)
- if tag.is_a?(Array)
- @blacklisted_tags += tag
- else
- @blacklisted_tags << tag
- end
- end
-
- def all_tags_off
- @disable_all_tags = true
- end
-
- def all_tags_on
- @disable_all_tags = false
- end
-
- def whitelist_tag(tag)
- if tag.is_a?(Array)
- tag.each do |t|
- @blacklisted_tags.delete(t)
- end
- else
- @blacklisted_tags.delete(tag)
- end
- end
-
- def whitelist_all_tags
- @disabled_tags.clear
- end
-
- def is_tag_active?(tag)
- if @disable_all_tags
- false
- else
- @active_tags.include?(tag) #and not @disabled_tags.include?(tag)
- end
- end
-
- def remove_all_active_tags
- @active_tags.clear
- end
-
- def set_scoped_tag(tag)
- @scoped_tag = tag
- end
-
- def clear_scoped_tag
- @scoped_tag = nil
- end
-
- def has_scoped_tag?
- if @disable_all_tags
- false
- else
- not @scoped_tag.nil? and not @scoped_tag.empty?
- end
- end
-
- def is_scoped_tag_active?
- #@active_tags.include?(@scoped_tag)
- not @blacklisted_tags.include?(@scoped_tag)
- end
-
- def self.method_missing(mtd,*args,&block)
- if TloggerConf.instance.respond_to?(mtd)
- TloggerConf.instance.send(mtd,*args,&block)
- else
- super
- end
- end
- end
- #
- # end TloggerConf singleton
- #
-
- #
- # add object like methods to make module a class
- #
- class << self
- attr_accessor :tag
- include Tlogger
-
- PROXY_MTD = [:debug, :info, :error, :warn]
- def new(*args)
- if args.length == 0
- args << STDOUT
- end
- @tlogger = Logger.new(*args)
- @tag = TloggerConf::GLOBAL_TAG
- # disable by default
- # If there is issue then enable it back in application level
- self
- end
-
- def tag=(val)
- @tag = val
- TloggerConf.activate_tag(@tag)
- self
- end
-
- def tdebug(tag,*args)
- with_tag(tag) do
- self.debug(*args)
- end
- self
- end
-
- def terror(tag, *args)
- with_tag(tag) do
- self.error(*args)
- end
- self
- end
-
- def tinfo(tag, *args)
- with_tag(tag) do
- self.info(*args)
- end
- self
- end
-
- def twarn(tag, *args)
- with_tag(tag) do
- self.warn(*args)
- end
- self
- end
-
- def intDebug(msg)
- #puts TloggerConf.active_tags
- if TloggerConf.instance.is_tag_active?(TloggerConf::INT_TAG)
- msg2 = "[#{TloggerConf::INT_TAG}] #{msg}"
- #puts "intDebug"
- @tlogger.debug(msg2)
- end
- end
-
- def method_missing(mtd,*args,&block)
- #@tlogger.debug "[tlogger] method_missing: Method #{mtd}"
- intDebug("method_missing: #{mtd}")
- if @tlogger.respond_to?(mtd)
-
- if PROXY_MTD.include?(mtd)
-
- if @tag.nil? or @tag.empty?
- # no tag. Output like normal log
- @tlogger.send(mtd, *args, &block)
-
- else
-
- if TloggerConf.has_scoped_tag?
- if TloggerConf.is_scoped_tag_active?
- intDebug("Scoped tag detected")
- tag = []
- tag << TloggerConf.scoped_tag
- if TloggerConf.instance.is_show_source?
- tag << " - "
- tag << find_caller
- end
- args[0] = "[#{tag.join}] #{args[0]}"
- @tlogger.send(mtd,*args,&block)
- end
- elsif TloggerConf.is_tag_active?(@tag)
- intDebug("Tagged output...")
- tag = []
- tag << @tag
- if TloggerConf.instance.is_show_source?
- tag << " - "
- tag << find_caller
- end
- args[0] = "[#{tag.join}] #{args[0]}"
- @tlogger.send(mtd,*args,&block)
-
- elsif TloggerConf.is_auto_tag_on?
- intDebug("auto_tag is on...")
- args = tag_class(*args)
- @tlogger.send(mtd,*args,&block)
-
- end
-
- end
-
- else
- intDebug("Not proxy method for logger. Pass to logger to handle. (#{mtd})")
- ## not the debug, info, warn and error method, no need change message
- @tlogger.send(mtd, *args, &block)
- end
-
-
- elsif TloggerConf.instance.respond_to?(mtd)
- # redirect the config method to make it consistent API
- intDebug("Redirect to TloggerConf for consistancy (#{mtd})")
- TloggerConf.send(mtd, *args, &block)
- else
- intDebug("Call method_missing parent to handle method '#{mtd}'")
- super
- end
- end
- # end method_missing
- #
-
- private
- def tag_class(*args)
- args[0] = "[#{find_caller}] #{args[0]}"
- args
- end
- # end tag_class()
- #
-
- def find_caller
- caller.each do |c|
- next if c =~ /tlogger.rb/
- @cal = c
- break
- end
-
- if @cal.nil? or @cal.empty?
- @cal = caller[0]
- end
-
- # reduce it down to last two folder?
- sp = @cal.split(File::SEPARATOR)
- if sp.length > 1
- msg = "/#{sp[-2]}/#{sp[-1]}"
- else
- msg = sp[-1]
- end
-
- msg
-
- #wd = Dir.getwd
- #indx = @cal =~ /#{wd}/
- #if indx != nil
- # @scal = []
- # @scal << @cal[0..indx]
- # @scal << @cal[indx+wd.length..-1]
- # @scal.join
- #else
- # @cal
- #end
- end
- # end find_caller
- #
- end
- #
- # end class definition
- #
-
-
- def with_tag(tag,&block)
- if block
- TloggerConf.instance.set_scoped_tag(tag) #if not TloggerConf.instance.disabled_tags.include?(tag)
- block.call
- TloggerConf.instance.clear_scoped_tag
- end
- end
-
end