Class: Smplkit::Logging::LoggingClient

Inherits:
Object
  • Object
show all
Defined in:
lib/smplkit/logging/client.rb

Overview

Synchronous logging runtime namespace.

Obtained via Smplkit::Client#logging. Manages the discovery and level application for a customer’s logging frameworks via pluggable adapters. CRUD has moved to mgmt.loggers.* / mgmt.log_groups.*.

Instance Method Summary collapse

Constructor Details

#initialize(parent, manage:, metrics:, logging_base_url:, app_base_url:) ⇒ LoggingClient

Returns a new instance of LoggingClient.



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/smplkit/logging/client.rb', line 13

def initialize(parent, manage:, metrics:, logging_base_url:, app_base_url:)
  @parent = parent
  @manage = manage
  @metrics = metrics
  @logging_base_url = logging_base_url
  @app_base_url = app_base_url
  @adapters = []
  @installed = false
  @global_listeners = []
  @key_listeners = Hash.new { |h, k| h[k] = [] }
  @lock = Mutex.new
end

Instance Method Details

#_closeObject



85
86
87
88
# File 'lib/smplkit/logging/client.rb', line 85

def _close
  @adapters.each(&:uninstall_hook) if @installed
  @installed = false
end

#adaptersObject



58
59
60
# File 'lib/smplkit/logging/client.rb', line 58

def adapters
  @adapters.dup
end

#delete(name) ⇒ Object



70
71
72
# File 'lib/smplkit/logging/client.rb', line 70

def delete(name)
  @manage.loggers.delete(name)
end

#get(name) ⇒ Object



62
63
64
# File 'lib/smplkit/logging/client.rb', line 62

def get(name)
  @manage.loggers.get(name)
end

#installObject Also known as: start

Install the logging integration.

Auto-loads the stdlib-logger adapter (always) and the semantic-logger adapter (when the gem is available). Customer explicit registration via register_adapter wins over auto-load.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/smplkit/logging/client.rb', line 31

def install
  return self if @installed

  auto_load_adapters if @adapters.empty?

  @adapters.each do |adapter|
    discovered = adapter.discover
    discovered.each { |(name, _explicit, effective)| observe_logger(adapter, name, effective) }
    adapter.install_hook { |name, _explicit, effective| observe_logger(adapter, name, effective) }
  end

  @ws_manager = @parent._ensure_ws
  @ws_manager.on("logger_changed") { |data| handle_logger_changed(data) }
  @installed = true
  self
end

#listObject



66
67
68
# File 'lib/smplkit/logging/client.rb', line 66

def list
  @manage.loggers.list
end

#on_change(name = nil, &block) ⇒ Object

Raises:

  • (ArgumentError)


74
75
76
77
78
79
80
81
82
83
# File 'lib/smplkit/logging/client.rb', line 74

def on_change(name = nil, &block)
  raise ArgumentError, "on_change requires a block" unless block

  if name.nil?
    @global_listeners << block
  else
    @key_listeners[Normalize.normalize_logger_name(name)] << block
  end
  block
end

#register_adapter(adapter) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/smplkit/logging/client.rb', line 49

def register_adapter(adapter)
  unless adapter.is_a?(Adapters::Base)
    raise ArgumentError, "adapter must implement Smplkit::Logging::Adapters::Base"
  end

  @adapters << adapter
  self
end