legion-logging 1.5.4 → 1.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/legion/logging/logger.rb +1 -1
- data/lib/legion/logging/methods.rb +20 -9
- data/lib/legion/logging/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cd5e1bffbdc433aedb24653ea515080063cb456de0c5a0fd5a57cdbff91d371d
|
|
4
|
+
data.tar.gz: 0b015f1b0c5d12511f231bfa32325e2ebcc41ca902b92d8293bdcf6359d8a7ac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0bad8e3a31fb86de2b1a2749457b506e7042606e7e060813a0adcaf81f2d0afdf8998e3ba57692fabe5814ab7efcb3dcadfb9c8e985a77b6f3c4e44aedcccf35
|
|
7
|
+
data.tar.gz: 83475ff76aae03a25c24e1b464695f68ef6b4514309e6290485e513066f3d9f4ff9367e2b87e087f89dd1f1b6b3fafa4176ca5fcae226224859356d23189a80f
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Legion::Logging Changelog
|
|
2
2
|
|
|
3
|
+
## [1.5.5] - 2026-05-27
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- `emit_tagged` (used by all Legion::Logging::Helper consumers) now routes through the async writer instead of doing synchronous IO#write — eliminates IO mutex contention across all consumer threads
|
|
7
|
+
- `fatal` level now routes through async writer consistently with all other levels
|
|
8
|
+
- `log_exception` now writes through async writer instead of direct `log.public_send`
|
|
9
|
+
- `Legion::Logging::Logger` defaults to `async: true`, ensuring all per-extension logger instances use non-blocking writes
|
|
10
|
+
|
|
3
11
|
## [1.5.4] - 2026-05-22
|
|
4
12
|
|
|
5
13
|
### Added
|
|
@@ -11,7 +11,7 @@ module Legion
|
|
|
11
11
|
include Legion::Logging::Methods
|
|
12
12
|
include Legion::Logging::Builder
|
|
13
13
|
|
|
14
|
-
def initialize(level: 'info', log_file: nil, log_stdout: nil, lex: nil, trace: false, extended: false, trace_size: 4, format: :text, async:
|
|
14
|
+
def initialize(level: 'info', log_file: nil, log_stdout: nil, lex: nil, trace: false, extended: false, trace_size: 4, format: :text, async: true, **opts)
|
|
15
15
|
@lex = lex
|
|
16
16
|
set_log(logfile: log_file, log_stdout: log_stdout)
|
|
17
17
|
log_level(level)
|
|
@@ -66,11 +66,9 @@ module Legion
|
|
|
66
66
|
return unless log.level < 5
|
|
67
67
|
|
|
68
68
|
message = yield if message.nil? && block_given?
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
log.fatal(message)
|
|
73
|
-
fire_log_writer(:fatal, raw)
|
|
69
|
+
raw = maybe_redact(message)
|
|
70
|
+
formatted = format_message_for_level(:fatal, raw)
|
|
71
|
+
write_async_or_sync(:fatal, formatted, raw, writer_context: build_writer_context(:fatal, raw))
|
|
74
72
|
end
|
|
75
73
|
|
|
76
74
|
def unknown(message = nil)
|
|
@@ -89,8 +87,20 @@ module Legion
|
|
|
89
87
|
formatted = format_message_for_level(level, raw)
|
|
90
88
|
|
|
91
89
|
with_tagged_context(segments, method_ctx) do
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
ctx = %i[warn error fatal].include?(level) ? build_writer_context(level, raw) : nil
|
|
91
|
+
writer = @async_writer
|
|
92
|
+
caller_trace = capture_runner_trace_for_async
|
|
93
|
+
if writer&.alive?
|
|
94
|
+
writer.push(AsyncWriter::LogEntry.new(
|
|
95
|
+
level: level, message: formatted, writer_context: ctx,
|
|
96
|
+
segments: Thread.current[:legion_log_segments],
|
|
97
|
+
method_ctx: Thread.current[:legion_log_method],
|
|
98
|
+
caller_trace: caller_trace
|
|
99
|
+
))
|
|
100
|
+
else
|
|
101
|
+
with_caller_trace(caller_trace) { write_forced(level, formatted) }
|
|
102
|
+
fire_log_writer(level, raw) if ctx
|
|
103
|
+
end
|
|
94
104
|
end
|
|
95
105
|
end
|
|
96
106
|
|
|
@@ -104,11 +114,12 @@ module Legion
|
|
|
104
114
|
source_code_uri: nil, handled: false, payload_summary: nil,
|
|
105
115
|
task_id: nil, backtrace_limit: nil, **extra)
|
|
106
116
|
level = level.to_sym if level.respond_to?(:to_sym)
|
|
107
|
-
# 1. Log human-readable line + backtrace
|
|
117
|
+
# 1. Log human-readable line + backtrace via async writer
|
|
108
118
|
msg = exception.respond_to?(:message) ? exception.message : exception.to_s
|
|
109
119
|
msg = maybe_redact(msg)
|
|
110
120
|
msg = build_exception_log_message(exception, msg, backtrace_limit)
|
|
111
|
-
|
|
121
|
+
formatted = format_message_for_level(level, msg)
|
|
122
|
+
write_async_or_sync(level, formatted, msg)
|
|
112
123
|
|
|
113
124
|
# 2. Build rich exception event
|
|
114
125
|
event = Legion::Logging::EventBuilder.build_exception(
|