Sha256: f966f3fa4740b5cffdb7c771523f39e387774cbd4f56e08731530b8214d94d1e

Contents?: true

Size: 1.48 KB

Versions: 2

Compression:

Stored size: 1.48 KB

Contents

# -*- encoding: utf-8 -*-
require 'logger'

class XLogger < Logger
  def initialize(hint = {})

    if(hint[:rotate])
      super(hint[:file] || STDOUT, hint[:rotate])
    else
      super(hint[:file] || STDOUT)
    end

    STDOUT.sync = true
    self.formatter = Formatter.new
    self.datetime_format = hint[:date_format] || "%d.%m %H:%M:%S"

    # Don't change default logger if asked
    if hint[:dont_touch_rails_logger].blank? && defined?(ActiveRecord::Base)
      ActiveRecord::Base.logger = self
      
      def Rails.logger
        ActiveRecord::Base.logger
      end
    end

    self.level = hint[:log_level] || rails_env_log_level
    log_sql if hint[:log_sql] || !prod_env?
  end

  class Formatter < Logger::Formatter
    def call(severity, time, progname, msg)
      if severity == 'INFO' && msg.nil?
        # use this if you want a simple blank line without date in your logs:
        # just call a logger.info without any params
        "\n"
      else
        format_datetime(time) << " " <<  msg2str(msg) << "\n"
      end
    end
  end

  def log_sql
    ActiveRecord::Base.connection.logger = self if defined?(ActiveRecord::Base)
  end

  def rails_env_log_level
    prod_env? ? Logger::INFO : Logger::DEBUG
  end
  
  def prod_env?
    defined?(Rails) && Rails.env == 'production'
  end
end

if defined?(ActiveRecord)
  module ActiveRecord
    module ConnectionAdapters
      class AbstractAdapter
        def logger=(val)
          @logger = val
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bin_script-0.1.7 lib/bin_script/xlogger.rb
bin_script-0.1.6 lib/bin_script/xlogger.rb