tagged_logger 0.2.1 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
 - data/CHANGES.markdown +13 -0
 - data/VERSION +1 -1
 - data/lib/tagged_logger.rb +40 -25
 - data/tagged_logger.gemspec +3 -2
 - data/test/test.rb +12 -5
 - data/todo.txt +21 -1
 - metadata +3 -2
 
    
        data/.gitignore
    CHANGED
    
    
    
        data/CHANGES.markdown
    ADDED
    
    | 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # tagged_logger changelog
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ## Version 0.2.5
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            * If somebody is not ready to define any logging rules, but still want to use #logger everywhere, use new _init()_ method:
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                _TaggedLogger.init_
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            * Runs about 3 times faster by executing code responsible for rule matching to the first _#logger()_ call and "precompiling" it.
         
     | 
| 
      
 10 
     | 
    
         
            +
            So rather than iterating over **all** rules on every _#logger_ call only subset of rules specific to _#logger()_ callee are executed.
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            * Code simplified
         
     | 
| 
      
 13 
     | 
    
         
            +
               
         
     | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0.2. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.2.5
         
     | 
    
        data/lib/tagged_logger.rb
    CHANGED
    
    | 
         @@ -2,30 +2,32 @@ require 'delegate' 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require 'facets/dictionary'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            class TaggedLogger
         
     | 
| 
       5 
     | 
    
         
            -
              @logger_generator_exists = false
         
     | 
| 
       6 
5 
     | 
    
         
             
              @rename_rules = Dictionary.new
         
     | 
| 
       7 
6 
     | 
    
         
             
              @tag_blocks = Dictionary.new
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       9 
8 
     | 
    
         
             
              class << self
         
     | 
| 
       10 
9 
     | 
    
         
             
                def reset
         
     | 
| 
       11 
10 
     | 
    
         
             
                  @rename_rules = Dictionary.new
         
     | 
| 
       12 
11 
     | 
    
         
             
                  @tag_blocks = Dictionary.new
         
     | 
| 
      
 12 
     | 
    
         
            +
                  ObjectSpace.each_object(ClassSpecificLogger) { |obj| obj.detach }
         
     | 
| 
       13 
13 
     | 
    
         
             
                end
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                def rules(&block)
         
     | 
| 
       16 
16 
     | 
    
         
             
                  instance_eval(&block)
         
     | 
| 
       17 
17 
     | 
    
         
             
                end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                def  
     | 
| 
      
 19 
     | 
    
         
            +
                def blocks_for(tag)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  blocks = []
         
     | 
| 
       20 
21 
     | 
    
         
             
                  tag_aliases(tag) do |tag_alias|
         
     | 
| 
       21 
22 
     | 
    
         
             
                    tag_blocks(tag_alias) do |tag_block|
         
     | 
| 
       22 
     | 
    
         
            -
                       
     | 
| 
      
 23 
     | 
    
         
            +
                      blocks << [tag_alias, tag_block]
         
     | 
| 
       23 
24 
     | 
    
         
             
                    end
         
     | 
| 
       24 
25 
     | 
    
         
             
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  blocks
         
     | 
| 
       25 
27 
     | 
    
         
             
                end
         
     | 
| 
       26 
28 
     | 
    
         | 
| 
       27 
29 
     | 
    
         
             
                def init
         
     | 
| 
       28 
     | 
    
         
            -
                   
     | 
| 
      
 30 
     | 
    
         
            +
                  add_logger_generator_in_Kernel
         
     | 
| 
       29 
31 
     | 
    
         
             
                end
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
       31 
33 
     | 
    
         
             
                def output_everything_to(logger = nil, &block)
         
     | 
| 
         @@ -37,7 +39,7 @@ class TaggedLogger 
     | 
|
| 
       37 
39 
     | 
    
         
             
                end
         
     | 
| 
       38 
40 
     | 
    
         | 
| 
       39 
41 
     | 
    
         
             
                def output(spec, &block)
         
     | 
| 
       40 
     | 
    
         
            -
                   
     | 
| 
      
 42 
     | 
    
         
            +
                  add_logger_generator_in_Kernel
         
     | 
| 
       41 
43 
     | 
    
         
             
                  if spec.is_a? Hash
         
     | 
| 
       42 
44 
     | 
    
         
             
                    spec.each do |what, where|
         
     | 
| 
       43 
45 
     | 
    
         
             
                      @tag_blocks[tag_matcher(what)] = lambda { |level, tag, msg | where.send(level, "#{tag}: #{msg}\n") }
         
     | 
| 
         @@ -96,30 +98,43 @@ class TaggedLogger 
     | 
|
| 
       96 
98 
     | 
    
         
             
                  end
         
     | 
| 
       97 
99 
     | 
    
         
             
                end
         
     | 
| 
       98 
100 
     | 
    
         | 
| 
       99 
     | 
    
         
            -
                def  
     | 
| 
       100 
     | 
    
         
            -
                  return if  
     | 
| 
       101 
     | 
    
         
            -
                   
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
                       
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
                        return class_logger if class_logger
         
     | 
| 
       108 
     | 
    
         
            -
                        @class_logger = SimpleDelegator.new(TaggedLogger)
         
     | 
| 
       109 
     | 
    
         
            -
                        class_logging_tag = self.class == Class ?  self.to_s : self.class.to_s 
         
     | 
| 
       110 
     | 
    
         
            -
                        [:debug, :warn, :info, :error, :fatal].each do |method|
         
     | 
| 
       111 
     | 
    
         
            -
                          (class << @class_logger;self;end).instance_eval do
         
     | 
| 
       112 
     | 
    
         
            -
                            define_method method do |msg|
         
     | 
| 
       113 
     | 
    
         
            -
                              __getobj__.log(method, class_logging_tag, msg)
         
     | 
| 
       114 
     | 
    
         
            -
                            end
         
     | 
| 
       115 
     | 
    
         
            -
                           end
         
     | 
| 
       116 
     | 
    
         
            -
                        end
         
     | 
| 
      
 101 
     | 
    
         
            +
                def add_logger_generator_in_Kernel
         
     | 
| 
      
 102 
     | 
    
         
            +
                  return if Kernel.respond_to?(:logger, true) #no harm
         
     | 
| 
      
 103 
     | 
    
         
            +
                  Kernel.class_eval do
         
     | 
| 
      
 104 
     | 
    
         
            +
                    def logger
         
     | 
| 
      
 105 
     | 
    
         
            +
                      klass = self.class == Class ? self : self.class
         
     | 
| 
      
 106 
     | 
    
         
            +
                      result = klass.class_eval do
         
     | 
| 
      
 107 
     | 
    
         
            +
                        return @class_logger if @class_logger
         
     | 
| 
      
 108 
     | 
    
         
            +
                        @class_logger = ClassSpecificLogger.new(klass)
         
     | 
| 
       117 
109 
     | 
    
         
             
                        @class_logger
         
     | 
| 
       118 
110 
     | 
    
         
             
                      end
         
     | 
| 
      
 111 
     | 
    
         
            +
                      result
         
     | 
| 
       119 
112 
     | 
    
         
             
                    end
         
     | 
| 
       120 
     | 
    
         
            -
                    logger
         
     | 
| 
       121 
113 
     | 
    
         
             
                  end
         
     | 
| 
       122 
114 
     | 
    
         
             
                end
         
     | 
| 
       123 
115 
     | 
    
         | 
| 
       124 
116 
     | 
    
         
             
              end # class methods
         
     | 
| 
      
 117 
     | 
    
         
            +
              
         
     | 
| 
      
 118 
     | 
    
         
            +
              class ClassSpecificLogger
         
     | 
| 
      
 119 
     | 
    
         
            +
                def eigenclass
         
     | 
| 
      
 120 
     | 
    
         
            +
                  class <<self; self; end
         
     | 
| 
      
 121 
     | 
    
         
            +
                end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                def initialize(klass)
         
     | 
| 
      
 124 
     | 
    
         
            +
                  @klass = klass
         
     | 
| 
      
 125 
     | 
    
         
            +
                  blocks = TaggedLogger.blocks_for(klass.to_s)
         
     | 
| 
      
 126 
     | 
    
         
            +
                  [:debug, :warn, :info, :error, :fatal].each do |method|
         
     | 
| 
      
 127 
     | 
    
         
            +
                    eigenclass.send(:define_method, method) do |msg|
         
     | 
| 
      
 128 
     | 
    
         
            +
                      blocks.each { |(tag_alias, block)| block.call(method, tag_alias, msg) }
         
     | 
| 
      
 129 
     | 
    
         
            +
                    end
         
     | 
| 
      
 130 
     | 
    
         
            +
                  end    
         
     | 
| 
      
 131 
     | 
    
         
            +
                end
         
     | 
| 
      
 132 
     | 
    
         
            +
                
         
     | 
| 
      
 133 
     | 
    
         
            +
                def detach
         
     | 
| 
      
 134 
     | 
    
         
            +
                  @klass.class_eval do
         
     | 
| 
      
 135 
     | 
    
         
            +
                    @class_logger = nil
         
     | 
| 
      
 136 
     | 
    
         
            +
                  end
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
              end
         
     | 
| 
      
 139 
     | 
    
         
            +
              
         
     | 
| 
       125 
140 
     | 
    
         
             
            end
         
     | 
    
        data/tagged_logger.gemspec
    CHANGED
    
    | 
         @@ -5,11 +5,11 @@ 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.name = %q{tagged_logger}
         
     | 
| 
       8 
     | 
    
         
            -
              s.version = "0.2. 
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.2.5"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.authors = ["Fedor Kocherga"]
         
     | 
| 
       12 
     | 
    
         
            -
              s.date = %q{2010-01- 
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2010-01-13}
         
     | 
| 
       13 
13 
     | 
    
         
             
              s.email = %q{fkocherga@gmail.com}
         
     | 
| 
       14 
14 
     | 
    
         
             
              s.extra_rdoc_files = [
         
     | 
| 
       15 
15 
     | 
    
         
             
                "README.html",
         
     | 
| 
         @@ -17,6 +17,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       17 
17 
     | 
    
         
             
              ]
         
     | 
| 
       18 
18 
     | 
    
         
             
              s.files = [
         
     | 
| 
       19 
19 
     | 
    
         
             
                ".gitignore",
         
     | 
| 
      
 20 
     | 
    
         
            +
                 "CHANGES.markdown",
         
     | 
| 
       20 
21 
     | 
    
         
             
                 "MIT-LICENSE",
         
     | 
| 
       21 
22 
     | 
    
         
             
                 "README.markdown",
         
     | 
| 
       22 
23 
     | 
    
         
             
                 "Rakefile",
         
     | 
    
        data/test/test.rb
    CHANGED
    
    | 
         @@ -18,7 +18,8 @@ end 
     | 
|
| 
       18 
18 
     | 
    
         
             
            class TaggedLoggerTest < Test::Unit::TestCase
         
     | 
| 
       19 
19 
     | 
    
         
             
              include RR::Adapters::TestUnit
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
               
     | 
| 
      
 21 
     | 
    
         
            +
              
         
     | 
| 
      
 22 
     | 
    
         
            +
              context "@standard_logger with stub output @out1;" do
         
     | 
| 
       22 
23 
     | 
    
         
             
                setup do
         
     | 
| 
       23 
24 
     | 
    
         
             
                  @out1 = TestLogDevice.new
         
     | 
| 
       24 
25 
     | 
    
         
             
                  @standard_logger = Logger.new(@out1)
         
     | 
| 
         @@ -26,6 +27,12 @@ class TaggedLoggerTest < Test::Unit::TestCase 
     | 
|
| 
       26 
27 
     | 
    
         
             
                  @standard_logger.formatter = @formatter
         
     | 
| 
       27 
28 
     | 
    
         
             
                end
         
     | 
| 
       28 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
                teardown do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  Kernel.class_eval do
         
     | 
| 
      
 32 
     | 
    
         
            +
                    remove_method :logger
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
                
         
     | 
| 
       29 
36 
     | 
    
         
             
                should "be able to intialize with minimal effort" do
         
     | 
| 
       30 
37 
     | 
    
         
             
                  TaggedLogger.init
         
     | 
| 
       31 
38 
     | 
    
         
             
                  dont_allow(@out1).write
         
     | 
| 
         @@ -33,7 +40,7 @@ class TaggedLoggerTest < Test::Unit::TestCase 
     | 
|
| 
       33 
40 
     | 
    
         
             
                  assert_nothing_raised { Class.new.logger }
         
     | 
| 
       34 
41 
     | 
    
         
             
                end
         
     | 
| 
       35 
42 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                context " 
     | 
| 
      
 43 
     | 
    
         
            +
                context "everything gets logged to @out1;" do
         
     | 
| 
       37 
44 
     | 
    
         
             
                  setup do 
         
     | 
| 
       38 
45 
     | 
    
         
             
                    logger = @standard_logger
         
     | 
| 
       39 
46 
     | 
    
         
             
                    TaggedLogger.rules do
         
     | 
| 
         @@ -42,7 +49,7 @@ class TaggedLoggerTest < Test::Unit::TestCase 
     | 
|
| 
       42 
49 
     | 
    
         
             
                    end
         
     | 
| 
       43 
50 
     | 
    
         
             
                  end
         
     | 
| 
       44 
51 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
                  should " 
     | 
| 
      
 52 
     | 
    
         
            +
                  should " be possible to log by .logger.debug/info/warn/error/fatal()" do
         
     | 
| 
       46 
53 
     | 
    
         
             
                    NewClass = Class.new
         
     | 
| 
       47 
54 
     | 
    
         
             
                    obj = NewClass.new
         
     | 
| 
       48 
55 
     | 
    
         
             
                    %w[debug info warn error fatal].each do |method|
         
     | 
| 
         @@ -78,14 +85,14 @@ class TaggedLoggerTest < Test::Unit::TestCase 
     | 
|
| 
       78 
85 
     | 
    
         
             
                      assert_equal "TEST: foo\n", @out1.to_s
         
     | 
| 
       79 
86 
     | 
    
         
             
                    end
         
     | 
| 
       80 
87 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
                    context " 
     | 
| 
      
 88 
     | 
    
         
            +
                    context "@logger2 with stub output @out2;" do
         
     | 
| 
       82 
89 
     | 
    
         
             
                      setup do 
         
     | 
| 
       83 
90 
     | 
    
         
             
                        @out2 = TestLogDevice.new
         
     | 
| 
       84 
91 
     | 
    
         
             
                        @logger2 = Logger.new(@out2)
         
     | 
| 
       85 
92 
     | 
    
         
             
                        @logger2.formatter = @formatter
         
     | 
| 
       86 
93 
     | 
    
         
             
                      end
         
     | 
| 
       87 
94 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
                      should "be possible to speialize logging for tag A by specifying  
     | 
| 
      
 95 
     | 
    
         
            +
                      should "be possible to speialize logging for tag A by specifying another @logger2" do
         
     | 
| 
       89 
96 
     | 
    
         
             
                        logger2 = @logger2
         
     | 
| 
       90 
97 
     | 
    
         
             
                        TaggedLogger.rules do
         
     | 
| 
       91 
98 
     | 
    
         
             
                          output A => logger2
         
     | 
    
        data/todo.txt
    CHANGED
    
    | 
         @@ -1 +1,21 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            - It is slow: logger on first call has to select only applicable rules and 
         
     | 
| 
      
 2 
     | 
    
         
            +
              run only them afterwards rather than going via all rules each time. It will
         
     | 
| 
      
 3 
     | 
    
         
            +
              gain almost 300% in parsing speed on my app.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            - Replace output ... => ... with
         
     | 
| 
      
 6 
     | 
    
         
            +
              format ...
         
     | 
| 
      
 7 
     | 
    
         
            +
              output ... => do
         
     | 
| 
      
 8 
     | 
    
         
            +
                 format ....
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            - output ... => ... - may be:
         
     | 
| 
      
 12 
     | 
    
         
            +
                 debug ... => ...
         
     | 
| 
      
 13 
     | 
    
         
            +
                 info ... => ...
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            - Simplest configuration with warning
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            - Switch tests on rr expectations
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            - logger called within Base does not log when Derived is instantiated
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            - writing messages in any encoding
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: tagged_logger
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.5
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors: 
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Fedor Kocherga
         
     | 
| 
         @@ -9,7 +9,7 @@ autorequire: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
            date: 2010-01- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2010-01-13 00:00:00 -06:00
         
     | 
| 
       13 
13 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
         @@ -24,6 +24,7 @@ extra_rdoc_files: 
     | 
|
| 
       24 
24 
     | 
    
         
             
            - README.markdown
         
     | 
| 
       25 
25 
     | 
    
         
             
            files: 
         
     | 
| 
       26 
26 
     | 
    
         
             
            - .gitignore
         
     | 
| 
      
 27 
     | 
    
         
            +
            - CHANGES.markdown
         
     | 
| 
       27 
28 
     | 
    
         
             
            - MIT-LICENSE
         
     | 
| 
       28 
29 
     | 
    
         
             
            - README.markdown
         
     | 
| 
       29 
30 
     | 
    
         
             
            - Rakefile
         
     |