Class: BudaApi::Logger

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

Overview

Centralized logging functionality for the SDK

Constant Summary collapse

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

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.logger ⇒ Object

Returns the value of attribute logger.



17
18
19
# File 'lib/buda_api/logger.rb', line 17

def logger
  @logger
end

Class Method Details

.debug(message) ⇒ Object

Log debug messages



30
31
32
# File 'lib/buda_api/logger.rb', line 30

def debug(message)
  current_logger.debug(message)
end

.error(message) ⇒ Object

Log error messages



45
46
47
# File 'lib/buda_api/logger.rb', line 45

def error(message)
  current_logger.error(message)
end

.fatal(message) ⇒ Object

Log fatal messages



50
51
52
# File 'lib/buda_api/logger.rb', line 50

def fatal(message)
  current_logger.fatal(message)
end

.info(message) ⇒ Object

Log info messages



35
36
37
# File 'lib/buda_api/logger.rb', line 35

def info(message)
  current_logger.info(message)
end

.log_error(error, context: {}) ⇒ Object

Log errors with full context



74
75
76
77
78
79
80
# File 'lib/buda_api/logger.rb', line 74

def log_error(error, context: {})
  error_msg = "Error: #{error.class.name} - #{error.message}"
  error_msg += "\nContext: #{context}" if context&.any?
  error_msg += "\nBacktrace:\n  #{error.backtrace.join("\n  ")}" if error.backtrace

  error(error_msg)
end

.log_request(method, url, headers: {}, body: nil) ⇒ Object

Log HTTP requests in debug mode



55
56
57
58
59
60
61
# File 'lib/buda_api/logger.rb', line 55

def log_request(method, url, headers: {}, body: nil)
  return unless debug_enabled?

  debug("→ #{method.upcase} #{url}")
  debug("→ Headers: #{headers}") if headers&.any?
  debug("→ Body: #{body}") if body
end

.log_response(status, headers: {}, body: nil, duration: nil) ⇒ Object

Log HTTP responses in debug mode



64
65
66
67
68
69
70
71
# File 'lib/buda_api/logger.rb', line 64

def log_response(status, headers: {}, body: nil, duration: nil)
  return unless debug_enabled?

  debug("← #{status}")
  debug("← Headers: #{headers}") if headers&.any?
  debug("← Body: #{truncate_body(body)}") if body
  debug("← Duration: #{duration}ms") if duration
end

.setup(level: :info, output: $stdout) ⇒ Object

Initialize the logger



20
21
22
23
24
25
26
27
# File 'lib/buda_api/logger.rb', line 20

def setup(level: :info, output: $stdout)
  @logger = ::Logger.new(output)
  @logger.level = LOG_LEVELS[level] || LOG_LEVELS[:info]
  @logger.formatter = proc do |severity, datetime, progname, msg|
    "[#{datetime.strftime('%Y-%m-%d %H:%M:%S')}] #{severity.ljust(5)} BudaApi: #{msg}\n"
  end
  @logger
end

.warn(message) ⇒ Object

Log warning messages



40
41
42
# File 'lib/buda_api/logger.rb', line 40

def warn(message)
  current_logger.warn(message)
end