Class: Smplkit::Logging::Adapters::SemanticLoggerAdapter

Inherits:
Base
  • Object
show all
Defined in:
lib/smplkit/logging/adapters/semantic_logger_adapter.rb

Overview

Adapter for the semantic_logger gem.

SemanticLogger has its own internal logger registry and its own level system that natively includes TRACE — a 1-to-1 map across all seven smplkit canonical levels.

Instance Method Summary collapse

Constructor Details

#initializeSemanticLoggerAdapter

Returns a new instance of SemanticLoggerAdapter.



19
20
21
22
23
24
# File 'lib/smplkit/logging/adapters/semantic_logger_adapter.rb', line 19

def initialize
  super
  @loggers = Concurrent::Hash.new
  @on_new = nil
  @uninstalled = false
end

Instance Method Details

#apply_level(logger_name, level) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/smplkit/logging/adapters/semantic_logger_adapter.rb', line 47

def apply_level(logger_name, level)
  logger = @loggers[logger_name]
  return unless logger
  return unless logger.respond_to?(:level=)

  logger.level = Levels.smpl_level_to_semantic(level)
end

#discoverObject



34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/smplkit/logging/adapters/semantic_logger_adapter.rb', line 34

def discover
  rows = []
  # Default named loggers SemanticLogger creates: itself + the global
  # one. Customers add more via +SemanticLogger[ClassOrName]+.
  all_loggers.each do |name, logger|
    level = logger.respond_to?(:level) ? logger.level : nil
    smpl_level = Levels.semantic_level_to_smpl(level)
    rows << [name, smpl_level, smpl_level]
  end

  rows.uniq { |row| row[0] }
end

#install_hook(&on_new_logger) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/smplkit/logging/adapters/semantic_logger_adapter.rb', line 55

def install_hook(&on_new_logger)
  @on_new = on_new_logger
  @uninstalled = false
  # SemanticLogger's API for new-logger interception varies across
  # versions. The Ruby SDK initial release relies on +discover+ being
  # called periodically — full prepend-based interception will be
  # filled in once tested against the targeted +semantic_logger+
  # version pinned in dev deps. (See ISSUES.md.)
end

#nameObject



26
27
28
# File 'lib/smplkit/logging/adapters/semantic_logger_adapter.rb', line 26

def name
  "semantic-logger"
end

#track(name, logger) ⇒ Object



30
31
32
# File 'lib/smplkit/logging/adapters/semantic_logger_adapter.rb', line 30

def track(name, logger)
  @loggers[name] = logger
end

#uninstall_hookObject



65
66
67
# File 'lib/smplkit/logging/adapters/semantic_logger_adapter.rb', line 65

def uninstall_hook
  @uninstalled = true
end