Class: Appsignal::Logger

Inherits:
Logger
  • Object
show all
Defined in:
lib/appsignal/logger.rb

Overview

Logger that flushes logs to the AppSignal logging service

Constant Summary collapse

PLAINTEXT =
0
LOGFMT =
1
JSON =
2
SEVERITY_MAP =
{
  DEBUG => 2,
  INFO => 3,
  WARN => 5,
  ERROR => 6,
  FATAL => 7
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(group, level: INFO, format: PLAINTEXT) ⇒ void

Create a new logger instance

Parameters:

  • group

    Name of the group for this logger.

  • level (defaults to: INFO)

    Log level to filter with

Raises:

  • (TypeError)


27
28
29
30
31
32
33
34
# File 'lib/appsignal/logger.rb', line 27

def initialize(group, level: INFO, format: PLAINTEXT)
  raise TypeError, "group must be a string" unless group.is_a? String

  @group = group
  @level = level
  @format = format
  @mutex = Mutex.new
end

Instance Attribute Details

#levelObject (readonly)

Returns the value of attribute level.



20
21
22
# File 'lib/appsignal/logger.rb', line 20

def level
  @level
end

Instance Method Details

#add(severity, message = nil, group = nil) ⇒ Object Also known as: log

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

We support the various methods in the Ruby logger class by supplying this method.



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
# File 'lib/appsignal/logger.rb', line 39

def add(severity, message = nil, group = nil)
  severity ||= UNKNOWN
  return true if severity < level

  group = @group if group.nil?
  if message.nil?
    if block_given?
      message = yield
    else
      message = group
      group = @group
    end
  end
  return if message.nil?

  message = formatter.call(severity, Time.now, group, message) if formatter

  Appsignal::Extension.log(
    group,
    SEVERITY_MAP.fetch(severity, 0),
    @format,
    message,
    Appsignal::Utils::Data.generate(appsignal_attributes)
  )
end

#debug(message = nil, attributes = {}) ⇒ void

This method returns an undefined value.

Log a debug level message

Parameters:

  • message (defaults to: nil)

    Message to log

  • attributes (defaults to: {})

    Attributes to tag the log with



70
71
72
73
74
75
76
77
# File 'lib/appsignal/logger.rb', line 70

def debug(message = nil, attributes = {})
  return if level > DEBUG

  message = yield if message.nil? && block_given?
  return if message.nil?

  add_with_attributes(DEBUG, message, @group, attributes)
end

#error(message = nil, attributes = {}) ⇒ void

This method returns an undefined value.

Log an error level message

Parameters:

  • message (defaults to: nil)

    Message to log

  • attributes (defaults to: {})

    Attributes to tag the log with



109
110
111
112
113
114
115
116
# File 'lib/appsignal/logger.rb', line 109

def error(message = nil, attributes = {})
  return if level > ERROR

  message = yield if message.nil? && block_given?
  return if message.nil?

  add_with_attributes(ERROR, message, @group, attributes)
end

#fatal(message = nil, attributes = {}) ⇒ void

This method returns an undefined value.

Log a fatal level message

Parameters:

  • message (defaults to: nil)

    Message to log

  • attributes (defaults to: {})

    Attributes to tag the log with



122
123
124
125
126
127
128
129
# File 'lib/appsignal/logger.rb', line 122

def fatal(message = nil, attributes = {})
  return if level > FATAL

  message = yield if message.nil? && block_given?
  return if message.nil?

  add_with_attributes(FATAL, message, @group, attributes)
end

#info(message = nil, attributes = {}) ⇒ void

This method returns an undefined value.

Log an info level message

Parameters:

  • message (defaults to: nil)

    Message to log

  • attributes (defaults to: {})

    Attributes to tag the log with



83
84
85
86
87
88
89
90
# File 'lib/appsignal/logger.rb', line 83

def info(message = nil, attributes = {})
  return if level > INFO

  message = yield if message.nil? && block_given?
  return if message.nil?

  add_with_attributes(INFO, message, @group, attributes)
end

#silence(_severity = ERROR, &block) ⇒ Object

When using ActiveSupport::TaggedLogging without the broadcast feature, the passed logger is required to respond to the silence method. In our case it behaves as the broadcast feature of the Rails logger, but we don't have to check if the parent logger has the silence method defined as our logger directly inherits from Ruby base logger.

Links: https://github.com/rails/rails/blob/e11ebc04cfbe41c06cdfb70ee5a9fdbbd98bb263/activesupport/lib/active_support/logger.rb#L60-L76 https://github.com/rails/rails/blob/main/activesupport/e11ebc04cfbe41c06cdfb70ee5a9fdbbd98bb263/active_support/logger_silence.rb



140
141
142
# File 'lib/appsignal/logger.rb', line 140

def silence(_severity = ERROR, &block)
  block.call
end

#warn(message = nil, attributes = {}) ⇒ void

This method returns an undefined value.

Log a warn level message

Parameters:

  • message (defaults to: nil)

    Message to log

  • attributes (defaults to: {})

    Attributes to tag the log with



96
97
98
99
100
101
102
103
# File 'lib/appsignal/logger.rb', line 96

def warn(message = nil, attributes = {})
  return if level > WARN

  message = yield if message.nil? && block_given?
  return if message.nil?

  add_with_attributes(WARN, message, @group, attributes)
end