Class: DiscordRDA::Logger

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

Overview

Structured logging for DiscordRDA. Supports both simple and structured (JSON) log formats.

Examples:

Basic logging

logger = Logger.new(log_level: :info)
logger.info("Bot starting")
logger.warn("Rate limit approaching", threshold: 0.8)

Defined Under Namespace

Classes: ContextualLogger

Constant Summary collapse

LEVELS =

Log levels

{
  debug: 0,
  info: 1,
  warn: 2,
  error: 3,
  fatal: 4
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(level: :info, format: :structured, output: STDOUT, file_path: nil, rotate_age: 7, rotate_size: 10_485_760) ⇒ Logger

Create a new logger

Parameters:

  • level (Symbol) (defaults to: :info)

    Log level

  • format (Symbol) (defaults to: :structured)

    Log format

  • output (IO) (defaults to: STDOUT)

    Output destination (default: STDOUT)



39
40
41
42
43
44
# File 'lib/discord_rda/core/logger.rb', line 39

def initialize(level: :info, format: :structured, output: STDOUT, file_path: nil, rotate_age: 7, rotate_size: 10_485_760)
  @level = level.to_sym
  @format = format.to_sym
  @output = build_output(output, file_path, rotate_age, rotate_size)
  @mutex = Mutex.new
end

Instance Attribute Details

#formatSymbol (readonly)

Returns Log format (:simple or :structured).

Returns:

  • (Symbol)

    Log format (:simple or :structured)



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

def format
  @format
end

#levelSymbol (readonly)

Returns Current log level.

Returns:

  • (Symbol)

    Current log level



27
28
29
# File 'lib/discord_rda/core/logger.rb', line 27

def level
  @level
end

#outputIO (readonly)

Returns Output destination.

Returns:

  • (IO)

    Output destination



33
34
35
# File 'lib/discord_rda/core/logger.rb', line 33

def output
  @output
end

Instance Method Details

#debug(message, **context) ⇒ Object

Log a debug message

Parameters:

  • message (String)

    Log message

  • context (Hash)

    Additional context



49
50
51
# File 'lib/discord_rda/core/logger.rb', line 49

def debug(message, **context)
  log(:debug, message, context)
end

#error(message, error: nil, **context) ⇒ Object

Log an error message

Parameters:

  • message (String)

    Log message

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

    Optional error object

  • context (Hash)

    Additional context



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

def error(message, error: nil, **context)
  context = context.dup
  context[:error_class] = error.class.name if error
  context[:error_message] = error.message if error
  context[:backtrace] = error.backtrace.first(5) if error&.backtrace
  log(:error, message, context)
end

#fatal(message, error: nil, **context) ⇒ Object

Log a fatal message

Parameters:

  • message (String)

    Log message

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

    Optional error object

  • context (Hash)

    Additional context



83
84
85
86
87
88
# File 'lib/discord_rda/core/logger.rb', line 83

def fatal(message, error: nil, **context)
  context = context.dup
  context[:error_class] = error.class.name if error
  context[:error_message] = error.message if error
  log(:fatal, message, context)
end

#info(message, **context) ⇒ Object

Log an info message

Parameters:

  • message (String)

    Log message

  • context (Hash)

    Additional context



56
57
58
# File 'lib/discord_rda/core/logger.rb', line 56

def info(message, **context)
  log(:info, message, context)
end

#level_enabled?(level) ⇒ Boolean

Check if a level is enabled

Parameters:

  • level (Symbol)

    Level to check

Returns:

  • (Boolean)

    True if enabled



93
94
95
# File 'lib/discord_rda/core/logger.rb', line 93

def level_enabled?(level)
  LEVELS[level.to_sym] >= LEVELS[@level]
end

#warn(message, **context) ⇒ Object

Log a warning message

Parameters:

  • message (String)

    Log message

  • context (Hash)

    Additional context



63
64
65
# File 'lib/discord_rda/core/logger.rb', line 63

def warn(message, **context)
  log(:warn, message, context)
end

#with_context(**context) ⇒ ContextualLogger

Create a child logger with additional context

Parameters:

  • context (Hash)

    Context to add to all logs

Returns:



100
101
102
# File 'lib/discord_rda/core/logger.rb', line 100

def with_context(**context)
  ContextualLogger.new(self, context)
end