semlog 0.1.1
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.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/README.md +60 -0
- data/lib/semlog.rb +8 -0
- data/lib/semlog/gelflog_appender.rb +68 -0
- data/lib/semlog/rabbit_notifier.rb +78 -0
- data/lib/semlog/severity.rb +37 -0
- data/lib/semlog/version.rb +3 -0
- data/semlog.gemspec +35 -0
- data/spec/semlog_spec.rb +11 -0
- data/spec/spec_helper.rb +2 -0
- metadata +98 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 964258648040269ffcdb9c07a46d970dfbb415d0
         | 
| 4 | 
            +
              data.tar.gz: cca947657b3e5609c503ccf0abc90d52bd4333af
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 424a1df5df3e47c9217fe214523f9dbd3bc7518735eaed5907e843a5cff4c82b5861a59b8f115a941ce7e3fa1f4cb59f0852518f0031ba1e7aabc91902ee9215
         | 
| 7 | 
            +
              data.tar.gz: 31520146ce5e1f8584410696d73720baf3b81c153db78632cba21ff596d56ae5ac61fe5f6676b4303edf099a413e2d585b501ef63928eb0c1967f135730f17cc
         | 
    
        data/Gemfile
    ADDED
    
    
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,60 @@ | |
| 1 | 
            +
            # Semlog
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Gelf log appender directly to rabbitmq
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ## Installation
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Add this line to your application's Gemfile:
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ```ruby
         | 
| 10 | 
            +
            gem 'semlog'
         | 
| 11 | 
            +
            ```
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            And then execute:
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                $ bundle
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            Or install it yourself as:
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                $ gem install semlog
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            ## Usage
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            Suggested initializer
         | 
| 24 | 
            +
            ```ruby
         | 
| 25 | 
            +
            $logger = SemanticLogger['semlog']
         | 
| 26 | 
            +
            $logger.level = Logger.const_get(ENV.fetch("LOG_LEVEL", "INFO"))
         | 
| 27 | 
            +
            SemanticLogger.add_appender(file_name: file_name, formatter: :color)
         | 
| 28 | 
            +
            SemanticLogger.add_appender(io: $stderr, level: :debug)
         | 
| 29 | 
            +
             | 
| 30 | 
            +
             | 
| 31 | 
            +
            gelf_appender = Semlog::SemanticLogger::Appender::GelflogAppender.new(
         | 
| 32 | 
            +
              host: ENV['RABBIT_HOST'],
         | 
| 33 | 
            +
              port: ENV['RABBIT_PORT'],
         | 
| 34 | 
            +
              vhost:ENV['RABBIT_VIRTUAL_HOST'],
         | 
| 35 | 
            +
              exchange: ENV['RABBIT_EXCHANGE'],
         | 
| 36 | 
            +
              user:  ENV['RABBIT_USER'],
         | 
| 37 | 
            +
              pw:  ENV['RABBIT_PW'],
         | 
| 38 | 
            +
              application: 'semlog'
         | 
| 39 | 
            +
            )
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            gelf_appender.name = 'Semlog'
         | 
| 42 | 
            +
             | 
| 43 | 
            +
             | 
| 44 | 
            +
            SemanticLogger.add_appender(gelf_appender)
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            $logger.info "Logging initiated to #{$logger.level } level"
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            ```
         | 
| 49 | 
            +
             | 
| 50 | 
            +
             | 
| 51 | 
            +
            ## Development
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            ## Contributing
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            Bug reports and pull requests are welcome on GitHub at https://github.com/leffen/semlog.
         | 
| 60 | 
            +
             | 
    
        data/lib/semlog.rb
    ADDED
    
    
| @@ -0,0 +1,68 @@ | |
| 1 | 
            +
            require "semantic_logger"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Semlog
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              class GelflogAppender < SemanticLogger::Subscriber
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                # Map Semantic Logger levels to Graylog levels
         | 
| 8 | 
            +
                LEVEL_MAP = {
         | 
| 9 | 
            +
                  fatal: Semlog::FATAL,
         | 
| 10 | 
            +
                  error: Semlog::ERROR,
         | 
| 11 | 
            +
                  warn: Semlog::WARN,
         | 
| 12 | 
            +
                  info: Semlog::INFO,
         | 
| 13 | 
            +
                  debug: Semlog::DEBUG,
         | 
| 14 | 
            +
                  trace: Semlog::DEBUG
         | 
| 15 | 
            +
                }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                attr_reader :notifier
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def initialize(options = {}, &block)
         | 
| 20 | 
            +
                  options = options.dup
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  @rabbit_host=options.delete(:host)|| 'localhost'
         | 
| 23 | 
            +
                  @port=options.delete(:port)|| 5672
         | 
| 24 | 
            +
                  @vhost=options.delete(:vhost)||''
         | 
| 25 | 
            +
                  @exchange=options.delete(:exchange)|| ''
         | 
| 26 | 
            +
                  @user=options.delete(:user)||''
         | 
| 27 | 
            +
                  @pw=options.delete(:pw)||''
         | 
| 28 | 
            +
                  @app_name = options.delete(:application) || 'Semlog'
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  super(options, &block)
         | 
| 31 | 
            +
                  self.application = @app_name
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  reopen
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def reopen
         | 
| 37 | 
            +
                  @notifier = RabbitNotifier.new(host: @rabbit_host, port: @port, vhost: @vhost, exchange_name: @exchange, user: @user, pw: @pw)
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def make_hash(log)
         | 
| 41 | 
            +
                  h = log.to_h(host, application)
         | 
| 42 | 
            +
                  h[:level] = map_level(log)
         | 
| 43 | 
            +
                  h[:level_str] = log.level.to_s
         | 
| 44 | 
            +
                  h[:short_message] = h.delete(:message) if log.message && !h.key?("short_message") && !h.key?(:short_message)
         | 
| 45 | 
            +
                  h[:request_uid] = h.delete(:tags).first if log.tags && log.tags.count > 0
         | 
| 46 | 
            +
                  h
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                # Forward log messages
         | 
| 50 | 
            +
                def log(log)
         | 
| 51 | 
            +
                  return false unless should_log?(log)
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  begin
         | 
| 54 | 
            +
                    @notifier.notify!(make_hash(log))
         | 
| 55 | 
            +
                  rescue => e
         | 
| 56 | 
            +
                    $logger.error "Semlog::Appender::GelflogAppender >EXCEPTION> #{e}"
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  true
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                # Returns the Graylog level for the supplied log message
         | 
| 63 | 
            +
                def map_level(log)
         | 
| 64 | 
            +
                  LEVEL_MAP[log.level]
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
            end
         | 
| @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            require 'bunny'
         | 
| 2 | 
            +
            require 'oj'
         | 
| 3 | 
            +
            require 'awesome_print'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Oj.default_options = {:mode => :compat}
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module Semlog
         | 
| 8 | 
            +
             | 
| 9 | 
            +
             | 
| 10 | 
            +
              class RabbitNotifier
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                attr_accessor :connection, :host, :port, :vhost, :exhange_name, :user, :pw, :default_options
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def initialize host:, port:, vhost:, exchange_name:, user:, pw:
         | 
| 15 | 
            +
                  @connection = nil
         | 
| 16 | 
            +
                  @host = host
         | 
| 17 | 
            +
                  @port = port
         | 
| 18 | 
            +
                  @vhost = vhost
         | 
| 19 | 
            +
                  @exhange_name = exchange_name
         | 
| 20 | 
            +
                  @user = user
         | 
| 21 | 
            +
                  @pw = pw
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  $logger.debug "RabbitNotifier>host: #{@host} port #{@port} vhost #{@vhost} "
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  @default_options = {}
         | 
| 26 | 
            +
                  @default_options['version'] = "1.1"
         | 
| 27 | 
            +
                  @default_options['host'] ||= Socket.gethostname
         | 
| 28 | 
            +
                  @default_options['level'] ||= Semlog::UNKNOWN
         | 
| 29 | 
            +
                  @default_options['facility'] ||= 'RabbitNotifier'
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                def connect
         | 
| 34 | 
            +
                  unless @connection
         | 
| 35 | 
            +
                    @connection = Bunny.new(:host => @host, :vhost => @vhost, :user => @user, :password => @pw)
         | 
| 36 | 
            +
                    @connection.start
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                  @connection
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                def gelfify(data)
         | 
| 42 | 
            +
                  gdata = @default_options.dup
         | 
| 43 | 
            +
                  data.keys.each do |key|
         | 
| 44 | 
            +
                    value, key_s = data[key], key.to_s
         | 
| 45 | 
            +
                    if ['host', 'level', 'version', 'short_message', 'full_message', 'timestamp', 'facility', 'line', 'file'].index(key_s)
         | 
| 46 | 
            +
                      gdata[key_s] = value
         | 
| 47 | 
            +
                    elsif key_s == 'action'
         | 
| 48 | 
            +
                      gdata["_application_action"] = value
         | 
| 49 | 
            +
                    elsif key_s == 'id'
         | 
| 50 | 
            +
                      gdata["_application_id"] = value
         | 
| 51 | 
            +
                    elsif key_s[0] != '_'
         | 
| 52 | 
            +
                      gdata["_#{key_s}"] = value
         | 
| 53 | 
            +
                    else
         | 
| 54 | 
            +
                      gdata[key_s] = value
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                  gdata
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                def data_to_json(data)
         | 
| 61 | 
            +
                  Oj.dump(gelfify(data))
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                def notify!(data)
         | 
| 65 | 
            +
                  exchange.publish(data_to_json(data))
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                def channel
         | 
| 69 | 
            +
                  connect
         | 
| 70 | 
            +
                  @channel ||= @connection.create_channel
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                def exchange
         | 
| 74 | 
            +
                  @exchange ||= channel.fanout(exhange_name, durable: true)
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            end
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            module Semlog
         | 
| 2 | 
            +
              # There are two things you should know about log levels/severity:
         | 
| 3 | 
            +
              #  - syslog defines levels from 0 (Emergency) to 7 (Debug).
         | 
| 4 | 
            +
              #    0 (Emergency) and 1 (Alert) levels are reserved for OS kernel.
         | 
| 5 | 
            +
              #  - Ruby default Logger defines levels from 0 (DEBUG) to 4 (FATAL) and 5 (UNKNOWN).
         | 
| 6 | 
            +
              #    Note that order is inverted.
         | 
| 7 | 
            +
              # For compatibility we define our constants as Ruby Logger, and convert values before
         | 
| 8 | 
            +
              # generating GELF message, using defined mapping.
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              module Levels
         | 
| 11 | 
            +
                DEBUG   = 0
         | 
| 12 | 
            +
                INFO    = 1
         | 
| 13 | 
            +
                WARN    = 2
         | 
| 14 | 
            +
                ERROR   = 3
         | 
| 15 | 
            +
                FATAL   = 4
         | 
| 16 | 
            +
                UNKNOWN = 5
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              include Levels
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              # Maps Ruby Logger levels to syslog levels as SyslogLogger and syslogger gems. This one is default.
         | 
| 22 | 
            +
              LOGGER_MAPPING = {DEBUG   => 7, # Debug
         | 
| 23 | 
            +
                                INFO    => 6, # Info
         | 
| 24 | 
            +
                                WARN    => 5, # Notice
         | 
| 25 | 
            +
                                ERROR   => 4, # Warning
         | 
| 26 | 
            +
                                FATAL   => 3, # Error
         | 
| 27 | 
            +
                                UNKNOWN => 1} # Alert – shouldn't be used
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              # Maps Ruby Logger levels to syslog levels as is.
         | 
| 30 | 
            +
              DIRECT_MAPPING = {DEBUG   => 7, # Debug
         | 
| 31 | 
            +
                                INFO    => 6, # Info
         | 
| 32 | 
            +
                                # skip 5 Notice
         | 
| 33 | 
            +
                                WARN    => 4, # Warning
         | 
| 34 | 
            +
                                ERROR   => 3, # Error
         | 
| 35 | 
            +
                                FATAL   => 2, # Critical
         | 
| 36 | 
            +
                                UNKNOWN => 1} # Alert – shouldn't be used
         | 
| 37 | 
            +
            end
         | 
    
        data/semlog.gemspec
    ADDED
    
    | @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            # coding: utf-8
         | 
| 2 | 
            +
            lib = File.expand_path('../lib', __FILE__)
         | 
| 3 | 
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 4 | 
            +
            require 'semlog/version'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Gem::Specification.new do |spec|
         | 
| 7 | 
            +
              spec.name          = "semlog"
         | 
| 8 | 
            +
              spec.version       = Semlog::VERSION
         | 
| 9 | 
            +
              spec.authors       = ["leffen"]
         | 
| 10 | 
            +
              spec.email         = ["leffen@gmail.com"]
         | 
| 11 | 
            +
              spec.license       = 'MIT'
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              spec.summary       = %q{Plugin log module to semantic logger}
         | 
| 14 | 
            +
              spec.description   = %q{Provides direct to Rabbitmq logging from semantic logger}
         | 
| 15 | 
            +
              spec.homepage      = "https://github.com/leffen/semlog"
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              spec.files       = Dir['lib/**/*.rb'] + %w(Gemfile semlog.gemspec README.md)
         | 
| 18 | 
            +
              spec.test_files  = Dir['spec/**/*.rb']
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              spec.require_paths = ["lib"]
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              if spec.respond_to?(:metadata)
         | 
| 23 | 
            +
              #  spec.metadata['allowed_push_host'] = "http://pagems:SuperSikkertLangtPassord!2020_@gems.asd09.com"
         | 
| 24 | 
            +
              else
         | 
| 25 | 
            +
                raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              spec.bindir        = "exe"
         | 
| 29 | 
            +
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 30 | 
            +
              spec.require_paths = ["lib"]
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              spec.add_development_dependency "bundler", "~> 1.12"
         | 
| 33 | 
            +
              spec.add_development_dependency "rake", "~> 10.0"
         | 
| 34 | 
            +
              spec.add_development_dependency "rspec", "~> 3.0"
         | 
| 35 | 
            +
            end
         | 
    
        data/spec/semlog_spec.rb
    ADDED
    
    
    
        data/spec/spec_helper.rb
    ADDED
    
    
    
        metadata
    ADDED
    
    | @@ -0,0 +1,98 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: semlog
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.1
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - leffen
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: exe
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2016-09-05 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: bundler
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - "~>"
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '1.12'
         | 
| 20 | 
            +
              type: :development
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - "~>"
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '1.12'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: rake
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - "~>"
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '10.0'
         | 
| 34 | 
            +
              type: :development
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - "~>"
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '10.0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: rspec
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - "~>"
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '3.0'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - "~>"
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '3.0'
         | 
| 55 | 
            +
            description: Provides direct to Rabbitmq logging from semantic logger
         | 
| 56 | 
            +
            email:
         | 
| 57 | 
            +
            - leffen@gmail.com
         | 
| 58 | 
            +
            executables: []
         | 
| 59 | 
            +
            extensions: []
         | 
| 60 | 
            +
            extra_rdoc_files: []
         | 
| 61 | 
            +
            files:
         | 
| 62 | 
            +
            - Gemfile
         | 
| 63 | 
            +
            - README.md
         | 
| 64 | 
            +
            - lib/semlog.rb
         | 
| 65 | 
            +
            - lib/semlog/gelflog_appender.rb
         | 
| 66 | 
            +
            - lib/semlog/rabbit_notifier.rb
         | 
| 67 | 
            +
            - lib/semlog/severity.rb
         | 
| 68 | 
            +
            - lib/semlog/version.rb
         | 
| 69 | 
            +
            - semlog.gemspec
         | 
| 70 | 
            +
            - spec/semlog_spec.rb
         | 
| 71 | 
            +
            - spec/spec_helper.rb
         | 
| 72 | 
            +
            homepage: https://github.com/leffen/semlog
         | 
| 73 | 
            +
            licenses:
         | 
| 74 | 
            +
            - MIT
         | 
| 75 | 
            +
            metadata: {}
         | 
| 76 | 
            +
            post_install_message: 
         | 
| 77 | 
            +
            rdoc_options: []
         | 
| 78 | 
            +
            require_paths:
         | 
| 79 | 
            +
            - lib
         | 
| 80 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 81 | 
            +
              requirements:
         | 
| 82 | 
            +
              - - ">="
         | 
| 83 | 
            +
                - !ruby/object:Gem::Version
         | 
| 84 | 
            +
                  version: '0'
         | 
| 85 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
              requirements:
         | 
| 87 | 
            +
              - - ">="
         | 
| 88 | 
            +
                - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                  version: '0'
         | 
| 90 | 
            +
            requirements: []
         | 
| 91 | 
            +
            rubyforge_project: 
         | 
| 92 | 
            +
            rubygems_version: 2.6.6
         | 
| 93 | 
            +
            signing_key: 
         | 
| 94 | 
            +
            specification_version: 4
         | 
| 95 | 
            +
            summary: Plugin log module to semantic logger
         | 
| 96 | 
            +
            test_files:
         | 
| 97 | 
            +
            - spec/semlog_spec.rb
         | 
| 98 | 
            +
            - spec/spec_helper.rb
         |