Class: Smplkit::Logging::LoggingClient
- Inherits:
-
Object
- Object
- Smplkit::Logging::LoggingClient
- 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.*.
Level resolution is client-side: the server stores raw configuration and the SDK walks the chain (env override → base → group chain →dot-notation ancestry) to compute each managed logger’s effective level. See Resolution.
Instance Method Summary collapse
- #_close ⇒ Object
- #adapters ⇒ Object
- #delete(name) ⇒ Object
- #get(name) ⇒ Object
-
#initialize(parent, manage:, metrics:, logging_base_url:, app_base_url:) ⇒ LoggingClient
constructor
A new instance of LoggingClient.
-
#install ⇒ Object
(also: #start)
Install the logging integration.
- #list(page_number: nil, page_size: nil) ⇒ Object
- #on_change(name = nil, &block) ⇒ Object
-
#refresh ⇒ Object
Re-fetch all loggers and groups and re-apply resolved levels.
- #register_adapter(adapter) ⇒ Object
Constructor Details
#initialize(parent, manage:, metrics:, logging_base_url:, app_base_url:) ⇒ LoggingClient
Returns a new instance of LoggingClient.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/smplkit/logging/client.rb', line 18 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 # original_name → normalized_id for every adapter-discovered logger. # We keep originals so adapter.apply_level receives whatever the # framework's registry indexes by. @name_map = {} # normalized_id → resolution-cache entry. Populated by # +_fetch_and_apply+ and mutated by the +logger_changed+ / # +logger_deleted+ WS handlers. @loggers_cache = {} # group id → resolution-cache entry. Without this, any managed # logger with +level=null+ that inherits from a group silently # keeps whatever level its adapter had at startup. @groups_cache = {} # normalized_id → resolved level (string). Used to decide whether # to fire change listeners on a re-resolution — a group-driven # change isn't visible in the raw +loggers_cache+ but moves the # resolved value. @resolved_levels = {} end |
Instance Method Details
#_close ⇒ Object
120 121 122 123 |
# File 'lib/smplkit/logging/client.rb', line 120 def _close @adapters.each(&:uninstall_hook) if @installed @installed = false end |
#adapters ⇒ Object
87 88 89 |
# File 'lib/smplkit/logging/client.rb', line 87 def adapters @adapters.dup end |
#delete(name) ⇒ Object
99 100 101 |
# File 'lib/smplkit/logging/client.rb', line 99 def delete(name) @manage.loggers.delete(name) end |
#get(name) ⇒ Object
91 92 93 |
# File 'lib/smplkit/logging/client.rb', line 91 def get(name) @manage.loggers.get(name) end |
#install ⇒ Object 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.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/smplkit/logging/client.rb', line 53 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 flush_initial_registration fetch_and_apply(trigger: "install") @ws_manager = @parent._ensure_ws @ws_manager.on("logger_changed") { |data| handle_logger_changed(data) } @ws_manager.on("logger_deleted") { |data| handle_logger_deleted(data) } @ws_manager.on("group_changed") { |data| handle_group_changed(data) } @ws_manager.on("group_deleted") { |data| handle_group_deleted(data) } @ws_manager.on("loggers_changed") { |data| handle_loggers_changed(data) } @installed = true self end |
#list(page_number: nil, page_size: nil) ⇒ Object
95 96 97 |
# File 'lib/smplkit/logging/client.rb', line 95 def list(page_number: nil, page_size: nil) @manage.loggers.list(page_number: page_number, page_size: page_size) end |
#on_change(name = nil, &block) ⇒ Object
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/smplkit/logging/client.rb', line 109 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 |
#refresh ⇒ Object
Re-fetch all loggers and groups and re-apply resolved levels. Fires change listeners for any logger whose resolved level moved.
105 106 107 |
# File 'lib/smplkit/logging/client.rb', line 105 def refresh fetch_and_apply(trigger: "refresh") end |