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 =
10_000- 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 33 34 35 |
# File 'lib/julewire/semantic_logger/transport.rb', line 16 def initialize(**) @mutex = Mutex.new @async = .delete(:async) { false } @max_queue_size = .delete(:max_queue_size) { DEFAULT_MAX_QUEUE_SIZE } @lag_check_interval = .delete(:lag_check_interval) { 1_000 } @lag_threshold_s = .delete(:lag_threshold_s) { 30 } @write_count = 0 @failure_count = 0 @degraded = false @closed = false @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
77 |
# File 'lib/julewire/semantic_logger/transport.rb', line 77 def after_fork! = reopen |
#close ⇒ Object
62 63 64 65 66 |
# File 'lib/julewire/semantic_logger/transport.rb', line 62 def close appender.close if appender.respond_to?(:close) @mutex.synchronize { @closed = true } nil end |
#flush ⇒ Object
56 57 58 59 60 |
# File 'lib/julewire/semantic_logger/transport.rb', line 56 def flush appender.flush if appender.respond_to?(:flush) clear_degraded nil end |
#health ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/julewire/semantic_logger/transport.rb', line 79 def health counts = @mutex.synchronize do { closed: @closed, degraded: @degraded, failures: @failure_count, writes: @write_count } end { type: "semantic_logger", status: status(counts), async: @async, warnings: lifecycle_warnings, 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
68 69 70 71 72 73 74 75 |
# File 'lib/julewire/semantic_logger/transport.rb', line 68 def reopen appender.reopen if appender.respond_to?(:reopen) @mutex.synchronize do @closed = false @degraded = false end nil end |
#write(value, severity:) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/julewire/semantic_logger/transport.rb', line 37 def write(value, severity:) log = log_for(value, severity: severity) @mutex.synchronize do @write_count += 1 # Synchronous appenders write under our mutex; async appenders own # queue synchronization and may block on bounded queues. appender.log(log) unless @async end appender.log(log) if @async clear_degraded nil rescue StandardError @mutex.synchronize do @failure_count += 1 @degraded = true end raise end |