Sha256: 7a1d00eec934e5dd0e3af5abdff91d580555ceccc676385b71ec25e942f8a705

Contents?: true

Size: 1.4 KB

Versions: 6

Compression:

Stored size: 1.4 KB

Contents

require 'syslog/logger'
require 'json'

module TN
  # Logs json to syslog.
  # Automatically delegates stuff to the syslog logger.
  # Use like:
  #    TangaServices.logger.open('my_application_name')
  #    TangaServices.logger.info({message: "I'm interesting data"})
  #    TangaServices.logger.error({message: "i crashed"})
  class Logger < Syslog::Logger
    def self.application_name=(application_name)
      @application_name = application_name
    end

    def self.logger
      @logger || Syslog::Logger.new((@application_name || 'unknown'), Syslog::LOG_LOCAL7)
    end

    def self.debug(hash)
      log(:debug, hash)
    end

    def self.info(hash)
      log(:info, hash)
    end

    def self.write(message)
      log(:info, message: message)
    end
    class << self
      alias :<< :write
    end

    def self.warn(hash)
      log(:warn, hash)
    end

    def self.error(hash)
      log(:error, hash)
    end

    def self.fatal(hash)
      log(:fatal, hash)
    end

    def self.log(level, hash)
      unless hash.is_a?(Hash)
        hash = { object: hash }
      end

      fail ArgumentError, 'we just log hashes' unless hash.is_a?(Hash)
      data = { level: level, object: hash }
      logger.send(level, data.to_json)
    end

    def self.method_missing(method, *args, &block)
      logger.send(method, *args, &block)
    end
  end

  # Convience access to logger
  def self.logger
    Logger
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dino_utils-0.1.21 lib/tn/logger.rb
dino_utils-0.1.20 lib/tn/logger.rb
dino_utils-0.1.19 lib/tn/logger.rb
dino_utils-0.1.18 lib/tn/logger.rb
dino_utils-0.1.16 lib/tn/logger.rb
dino_utils-0.1.15 lib/tn/logger.rb