Module: Fractor::RactorLogger

Defined in:
lib/fractor/logger.rb

Overview

Ractor-safe logging module.

This module provides logging functionality that works correctly within Ractors by using $stderr for unbuffered output.

Examples:

Inside a worker or ractor

Fractor::RactorLogger.debug("Processing work", ractor_name: "worker-1")
Fractor::RactorLogger.info("Worker started", ractor_name: "worker-1")
Fractor::RactorLogger.warn("Long processing time", ractor_name: "worker-1")
Fractor::RactorLogger.error("Worker failed", ractor_name: "worker-1", exception: e)

Constant Summary collapse

LEVELS =

Log levels in order of severity

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

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.enabledBoolean

Enable or disable logging

Returns:

  • (Boolean)

    Whether logging is enabled



138
139
140
# File 'lib/fractor/logger.rb', line 138

def enabled
  @enabled
end

.levelSymbol

Get or set the current log level

Returns:

  • (Symbol)

    Current log level (:debug, :info, :warn, :error)



134
135
136
# File 'lib/fractor/logger.rb', line 134

def level
  @level
end

Class Method Details

.debug(message, ractor_name: nil) ⇒ Object

Log a debug message

Parameters:

  • message (String)

    Message to log

  • ractor_name (String, nil) (defaults to: nil)

    Name of the ractor (optional)



162
163
164
165
166
# File 'lib/fractor/logger.rb', line 162

def debug(message, ractor_name: nil)
  return unless log?(:debug)

  log(:debug, message, ractor_name: ractor_name)
end

.debug!Object

Enable debug mode (sets level to :debug)



141
142
143
144
# File 'lib/fractor/logger.rb', line 141

def debug!
  self.level = :debug
  self.enabled = true
end

.error(message, ractor_name: nil, exception: nil) ⇒ Object

Log an error message

Parameters:

  • message (String)

    Message to log

  • ractor_name (String, nil) (defaults to: nil)

    Name of the ractor (optional)

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

    Exception object (optional)



190
191
192
193
194
# File 'lib/fractor/logger.rb', line 190

def error(message, ractor_name: nil, exception: nil)
  return unless log?(:error)

  log(:error, message, ractor_name: ractor_name, exception: exception)
end

.info(message, ractor_name: nil) ⇒ Object

Log an info message

Parameters:

  • message (String)

    Message to log

  • ractor_name (String, nil) (defaults to: nil)

    Name of the ractor (optional)



171
172
173
174
175
# File 'lib/fractor/logger.rb', line 171

def info(message, ractor_name: nil)
  return unless log?(:info)

  log(:info, message, ractor_name: ractor_name)
end

.log?(lvl) ⇒ Boolean

Check if a given log level would be logged

Parameters:

  • lvl (Symbol)

    Log level to check

Returns:

  • (Boolean)

    True if messages at this level would be logged



155
156
157
# File 'lib/fractor/logger.rb', line 155

def log?(lvl)
  enabled && LEVELS[lvl.to_sym] >= LEVELS[level]
end

.nodebug!Object

Disable debug mode (sets level to :warn)



147
148
149
150
# File 'lib/fractor/logger.rb', line 147

def nodebug!
  self.level = :warn
  self.enabled = false
end

.warn(message, ractor_name: nil) ⇒ Object

Log a warning message

Parameters:

  • message (String)

    Message to log

  • ractor_name (String, nil) (defaults to: nil)

    Name of the ractor (optional)



180
181
182
183
184
# File 'lib/fractor/logger.rb', line 180

def warn(message, ractor_name: nil)
  return unless log?(:warn)

  log(:warn, message, ractor_name: ractor_name)
end