Class: Julewire::SemanticLogger::Transport
- Inherits:
-
Object
- Object
- Julewire::SemanticLogger::Transport
- Defined in:
- lib/julewire/semantic_logger/transport.rb
Constant Summary collapse
- LOGGER_NAME =
"julewire"- DEFAULT_MAX_QUEUE_SIZE =
AsyncOptions::DEFAULT_MAX_QUEUE_SIZE
- LEVEL_MAP =
{ # SemanticLogger has no unknown level; fatal keeps unknown core records visible. unknown: :fatal }.freeze
- LEVEL_SET =
::SemanticLogger::LEVELS.to_h { [it, true] }.freeze
Instance Method Summary collapse
- #after_fork! ⇒ Object
- #close ⇒ Object
- #flush ⇒ Object
- #health ⇒ Object
-
#initialize(**options) ⇒ Transport
constructor
A new instance of Transport.
- #reopen ⇒ Object
- #write(value, severity:) ⇒ Object
Constructor Details
#initialize(**options) ⇒ Transport
Returns a new instance of Transport.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/julewire/semantic_logger/transport.rb', line 16 def initialize(**) @mutex = Mutex.new @async = .delete(:async) @async_options = AsyncOptions.extract() @async = @async_options.async?(@async) @max_queue_size = @async_options.max_queue_size @health = Core::Integration::DestinationHealth.new(counter_keys: %i[writes]) @appenders = build_appenders( appenders: .delete(:appenders), appender: .delete(:appender), file_name: .delete(:file_name), io: .delete(:io), options: ) @sink = build_sink(@appenders) @appender = build_transport_appender(@sink) end |
Instance Method Details
#after_fork! ⇒ Object
67 |
# File 'lib/julewire/semantic_logger/transport.rb', line 67 def after_fork! = reopen |
#close ⇒ Object
53 54 55 56 57 |
# File 'lib/julewire/semantic_logger/transport.rb', line 53 def close appender.close @closed = true nil end |
#flush ⇒ Object
46 47 48 49 50 51 |
# File 'lib/julewire/semantic_logger/transport.rb', line 46 def flush degradation_marker = @health.degradation_marker appender.flush @health.clear_degradation_if_unchanged(degradation_marker) nil end |
#health ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/julewire/semantic_logger/transport.rb', line 69 def health snapshot = @health.snapshot(status: status) counts = snapshot.fetch(:counts) { type: "semantic_logger", status: snapshot.fetch(:status), async: @async, warnings: lifecycle_warnings, last_failure: snapshot[:last_failure], counts: { writes: counts.fetch(:writes), failures: counts.fetch(:failures) }, appender: appender_health(appender), appenders: @appenders.each_with_index.map { |child, index| appender_health(child, index: index) } } end |
#reopen ⇒ Object
59 60 61 62 63 64 65 |
# File 'lib/julewire/semantic_logger/transport.rb', line 59 def reopen degradation_marker = @health.degradation_marker appender.reopen if appender.respond_to?(:reopen) @closed = false @health.clear_degradation_if_unchanged(degradation_marker) nil end |
#write(value, severity:) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/julewire/semantic_logger/transport.rb', line 34 def write(value, severity:) degradation_marker = @health.degradation_marker log = log_for(value, severity: severity) @health.increment(:writes) @mutex.synchronize { appender.log(log) } unless @async appender.log(log) if @async @health.clear_degradation_if_unchanged(degradation_marker) rescue StandardError => e @health.record_failure(e) raise end |