Class: Pigeon::Logging::StructuredLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/pigeon/logging/structured_logger.rb

Overview

Structured logger for Pigeon

Constant Summary collapse

LEVELS =

Log levels

{
  debug: Logger::DEBUG,
  info: Logger::INFO,
  warn: Logger::WARN,
  error: Logger::ERROR,
  fatal: Logger::FATAL
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(logger = nil, default_context = {}) ⇒ StructuredLogger

Initialize a new structured logger

Parameters:

  • logger (Logger) (defaults to: nil)

    Base logger to use

  • default_context (Hash) (defaults to: {})

    Default context to include in all log entries



22
23
24
25
# File 'lib/pigeon/logging/structured_logger.rb', line 22

def initialize(logger = nil, default_context = {})
  @logger = logger || Logger.new($stdout)
  @default_context = default_context || {}
end

Instance Method Details

#debug(message, context = {}) ⇒ void

This method returns an undefined value.

Log a debug message

Parameters:

  • message (String)

    Log message

  • context (Hash) (defaults to: {})

    Additional context for the log entry



52
53
54
# File 'lib/pigeon/logging/structured_logger.rb', line 52

def debug(message, context = {})
  log(:debug, message, context)
end

#debug?Boolean

Check if debug level is enabled

Returns:

  • (Boolean)

    Whether debug level is enabled



108
109
110
# File 'lib/pigeon/logging/structured_logger.rb', line 108

def debug?
  level_enabled?(:debug)
end

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

This method returns an undefined value.

Log an error message

Parameters:

  • message (String)

    Log message

  • context (Hash) (defaults to: {})

    Additional context for the log entry

  • error (Exception, nil) (defaults to: nil)

    Optional error to include in the log entry



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/pigeon/logging/structured_logger.rb', line 77

def error(message, context = {}, error = nil)
  context = context.dup
  if error
    context[:error] = {
      class: error.class.name,
      message: error.message,
      backtrace: error.backtrace&.take(10)
    }
  end
  log(:error, message, context)
end

#error?Boolean

Check if error level is enabled

Returns:

  • (Boolean)

    Whether error level is enabled



126
127
128
# File 'lib/pigeon/logging/structured_logger.rb', line 126

def error?
  level_enabled?(:error)
end

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

This method returns an undefined value.

Log a fatal message

Parameters:

  • message (String)

    Log message

  • context (Hash) (defaults to: {})

    Additional context for the log entry

  • error (Exception, nil) (defaults to: nil)

    Optional error to include in the log entry



94
95
96
97
98
99
100
101
102
103
104
# File 'lib/pigeon/logging/structured_logger.rb', line 94

def fatal(message, context = {}, error = nil)
  context = context.dup
  if error
    context[:error] = {
      class: error.class.name,
      message: error.message,
      backtrace: error.backtrace
    }
  end
  log(:fatal, message, context)
end

#fatal?Boolean

Check if fatal level is enabled

Returns:

  • (Boolean)

    Whether fatal level is enabled



132
133
134
# File 'lib/pigeon/logging/structured_logger.rb', line 132

def fatal?
  level_enabled?(:fatal)
end

#info(message, context = {}) ⇒ void

This method returns an undefined value.

Log an info message

Parameters:

  • message (String)

    Log message

  • context (Hash) (defaults to: {})

    Additional context for the log entry



60
61
62
# File 'lib/pigeon/logging/structured_logger.rb', line 60

def info(message, context = {})
  log(:info, message, context)
end

#info?Boolean

Check if info level is enabled

Returns:

  • (Boolean)

    Whether info level is enabled



114
115
116
# File 'lib/pigeon/logging/structured_logger.rb', line 114

def info?
  level_enabled?(:info)
end

#levelInteger

Get the current log level

Returns:

  • (Integer)

    Current log level



37
38
39
# File 'lib/pigeon/logging/structured_logger.rb', line 37

def level
  @logger.level
end

#level=(level) ⇒ Integer

Set the log level

Parameters:

  • level (Symbol, String, Integer)

    Log level

Returns:

  • (Integer)

    New log level



30
31
32
33
# File 'lib/pigeon/logging/structured_logger.rb', line 30

def level=(level)
  level_int = level_to_int(level)
  @logger.level = level_int
end

#level_enabled?(level) ⇒ Boolean

Check if a log level is enabled

Parameters:

  • level (Symbol, String, Integer)

    Log level

Returns:

  • (Boolean)

    Whether the log level is enabled



44
45
46
# File 'lib/pigeon/logging/structured_logger.rb', line 44

def level_enabled?(level)
  @logger.level <= level_to_int(level)
end

#warn(message, context = {}) ⇒ void

This method returns an undefined value.

Log a warning message

Parameters:

  • message (String)

    Log message

  • context (Hash) (defaults to: {})

    Additional context for the log entry



68
69
70
# File 'lib/pigeon/logging/structured_logger.rb', line 68

def warn(message, context = {})
  log(:warn, message, context)
end

#warn?Boolean

Check if warn level is enabled

Returns:

  • (Boolean)

    Whether warn level is enabled



120
121
122
# File 'lib/pigeon/logging/structured_logger.rb', line 120

def warn?
  level_enabled?(:warn)
end

#with_context(additional_context) ⇒ StructuredLogger

Create a new logger with additional default context

Parameters:

  • additional_context (Hash)

    Additional context to include in all log entries

Returns:



139
140
141
# File 'lib/pigeon/logging/structured_logger.rb', line 139

def with_context(additional_context)
  self.class.new(@logger, @default_context.merge(additional_context))
end