Module: Logplexer

Extended by:
Logplexer
Included in:
Logplexer
Defined in:
lib/logplexer.rb,
lib/logplexer/railtie.rb,
lib/logplexer/version.rb,
lib/logplexer/configuration.rb

Defined Under Namespace

Classes: Configuration, Railtie

Constant Summary collapse

VERSION =
"1.0.0"

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#configObject



12
13
14
# File 'lib/logplexer.rb', line 12

def config
  @config ||= Configuration.new
end

Instance Method Details

#above_min_log_level?(p) ⇒ Boolean

Returns:

  • (Boolean)


81
82
83
84
# File 'lib/logplexer.rb', line 81

def above_min_log_level?( p )
  min = Logplexer.config.min_log_level || :error
  return priority( p ) >= priority( min )
end

#configure {|config| ... } ⇒ Object

Yields:



16
17
18
# File 'lib/logplexer.rb', line 16

def configure(&blk)
  yield( config )
end

#is_logger?(logger) ⇒ Boolean

Returns:

  • (Boolean)


76
77
78
79
80
# File 'lib/logplexer.rb', line 76

def is_logger?(logger)
  eval( %w(debug info warn error fatal).map do |meth|
    "logger.respond_to?(:#{meth})"
  end.join( ' && ' ) )
end

#log(exception, log_level, **opts) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/logplexer.rb', line 28

def log( exception, log_level, **opts)
  # We wrap the Honeybadger notify call so that in development,
  # we actually see the errors. Then we can unwrap the REST errors
  # if need be

  return if exception.nil?
  return if Logplexer.config.quiet?

  # If the user specifies a logfile AND a logger in the call, the logger will win out
  logfile = opts.delete( :logfile ) || Logplexer.config.logfile
  logger = opts.delete( :logger ) || Logplexer.config.logger
  unless is_logger?(logger)
    raise LogplexerError, "If specified, logger must be able to respond to :debug, :info, :warn, :error, and :fatal"
  end

  # Override the verbosity if config.verbose is unset
  verbose = opts.delete( :verbose )
  verbose = verbose.nil? ? Logplexer.config.verbose? : verbose

  if Logplexer.config.honeybadger? && above_min_log_level?( log_level )

    if exception.is_a? String
      exception = { error_class: "Exception",
                    error_message: exception }
    end
    Honeybadger.notify( exception, opts )
  else
    # Make sure that the exception is an actual exception and
    # not just a hash since Honeybadger accepts both
    if exception.is_a? Exception
      logger.send( log_level, exception.message )
      if verbose
        exception.backtrace.each do |entry|
          logger.send( log_level, "> #{entry}" )
        end
      end

    elsif exception.is_a? String
      # Log just the string if thats what the user wants
      logger.send( log_level, exception )

    else
      # Default kind of log for an object or whatevs
      logger.send( log_level, exception.inspect )
    end
  end
end

#priority(level) ⇒ Object



86
87
88
89
# File 'lib/logplexer.rb', line 86

def priority( level )
  @priorities ||= { debug: 0, info: 1, warn: 2, error: 3, fatal: 4 }
  @priorities[ level.to_sym ]
end