legion-logging 1.4.1 → 1.4.2
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/category_registry.rb +45 -0
- data/lib/legion/logging/event_builder.rb +2 -1
- data/lib/legion/logging/siem_exporter.rb +6 -1
- data/lib/legion/logging/version.rb +1 -1
- data/lib/legion/logging.rb +9 -0
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 31ec07f7a93713fb708102528d4e61525a4c3b4fa39de510d29a454726b49436
|
|
4
|
+
data.tar.gz: 62a67fc723d1e865ef3e632d1987b6ce73c2fe9aa033686df5fe3b2fb89bc14c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5e0b2171b6ca1b1acbb3ad0f40cbd23a77bf5824a3b2f37a5c9b3484f7edf2cf9cf1a8dc23a9f0ed0acd426e139fb0d7ce13ac0a3ae2a77b3113dd0569cc6d53
|
|
7
|
+
data.tar.gz: e4e599809e26c6b7a0f9c1a81f05e390175cad0568b6b99f26888b675590972ff9148e27bc53f36461e1d6f09f83fcf7a818b01bd793098c5809910affabb0a2
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Legion::Logging Changelog
|
|
2
2
|
|
|
3
|
+
## [1.4.2] - 2026-03-28
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- `Legion::Logging::CategoryRegistry` module: extension-defined event category registration with `register_category`, `registered_categories`, `category_registered?`, and `category_info` methods
|
|
7
|
+
- `Legion::Logging.register_category` and `Legion::Logging.registered_categories` delegate methods on the top-level module
|
|
8
|
+
- `category:` keyword argument on `EventBuilder.build` — emits `category` field in structured log events when provided
|
|
9
|
+
- `SIEMExporter.format_for_elk` now includes `category` field when the event hash carries `:category` or `"category"`
|
|
10
|
+
|
|
3
11
|
## [1.4.1] - 2026-03-27
|
|
4
12
|
|
|
5
13
|
### Fixed
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Logging
|
|
5
|
+
module CategoryRegistry
|
|
6
|
+
VALID_NAME_PATTERN = /\A[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)*\z/
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
def register_category(name, description: nil, expected_fields: [])
|
|
10
|
+
name = name.to_s
|
|
11
|
+
raise ArgumentError, "invalid category name: #{name.inspect}" unless name.match?(VALID_NAME_PATTERN)
|
|
12
|
+
|
|
13
|
+
registry[name] = {
|
|
14
|
+
name: name,
|
|
15
|
+
description: description,
|
|
16
|
+
expected_fields: Array(expected_fields)
|
|
17
|
+
}.freeze
|
|
18
|
+
name
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def registered_categories
|
|
22
|
+
registry.dup.freeze
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def category_registered?(name)
|
|
26
|
+
registry.key?(name.to_s)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def category_info(name)
|
|
30
|
+
registry[name.to_s]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def clear!
|
|
34
|
+
registry.clear
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def registry
|
|
40
|
+
@registry ||= {}
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -13,7 +13,7 @@ module Legion
|
|
|
13
13
|
BACKTRACE_FALLBACK_FRAMES = 20
|
|
14
14
|
|
|
15
15
|
class << self
|
|
16
|
-
def build(level:, message:, lex: nil, lex_segments: nil, context: nil, caller_offset: 2)
|
|
16
|
+
def build(level:, message:, lex: nil, lex_segments: nil, context: nil, category: nil, caller_offset: 2)
|
|
17
17
|
event = base_fields(level, message)
|
|
18
18
|
event[:lex] = derive_lex_source(lex, lex_segments)
|
|
19
19
|
add_node(event)
|
|
@@ -21,6 +21,7 @@ module Legion
|
|
|
21
21
|
add_exception_info(event, message)
|
|
22
22
|
add_gem_info(event, event[:lex])
|
|
23
23
|
event[:context] = context if context
|
|
24
|
+
event[:category] = category.to_s if category
|
|
24
25
|
event.compact
|
|
25
26
|
end
|
|
26
27
|
|
|
@@ -37,12 +37,17 @@ module Legion
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def format_for_elk(event, index: 'legion')
|
|
40
|
-
{
|
|
40
|
+
result = {
|
|
41
41
|
'@timestamp' => Time.now.utc.iso8601,
|
|
42
42
|
'index' => index,
|
|
43
43
|
'message' => redact_phi(event.to_s),
|
|
44
44
|
'source' => 'legion'
|
|
45
45
|
}
|
|
46
|
+
if event.is_a?(Hash)
|
|
47
|
+
category = event[:category] || event['category']
|
|
48
|
+
result['category'] = category.to_s if category
|
|
49
|
+
end
|
|
50
|
+
result
|
|
46
51
|
end
|
|
47
52
|
end
|
|
48
53
|
end
|
data/lib/legion/logging.rb
CHANGED
|
@@ -7,6 +7,7 @@ require 'legion/logging/builder'
|
|
|
7
7
|
require 'legion/logging/event_builder'
|
|
8
8
|
require 'legion/logging/async_writer'
|
|
9
9
|
require 'legion/logging/helper'
|
|
10
|
+
require 'legion/logging/category_registry'
|
|
10
11
|
|
|
11
12
|
require 'json'
|
|
12
13
|
require 'logger'
|
|
@@ -32,6 +33,14 @@ module Legion
|
|
|
32
33
|
@exception_writer || DEFAULT_EXCEPTION_WRITER
|
|
33
34
|
end
|
|
34
35
|
|
|
36
|
+
def register_category(name, description: nil, expected_fields: [])
|
|
37
|
+
CategoryRegistry.register_category(name, description: description, expected_fields: expected_fields)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def registered_categories
|
|
41
|
+
CategoryRegistry.registered_categories
|
|
42
|
+
end
|
|
43
|
+
|
|
35
44
|
def setup(level: 'info', format: :text, async: true, **options)
|
|
36
45
|
output(**options)
|
|
37
46
|
log_level(level)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: legion-logging
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.4.
|
|
4
|
+
version: 1.4.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
@@ -61,6 +61,7 @@ files:
|
|
|
61
61
|
- lib/legion/logging.rb
|
|
62
62
|
- lib/legion/logging/async_writer.rb
|
|
63
63
|
- lib/legion/logging/builder.rb
|
|
64
|
+
- lib/legion/logging/category_registry.rb
|
|
64
65
|
- lib/legion/logging/event_builder.rb
|
|
65
66
|
- lib/legion/logging/helper.rb
|
|
66
67
|
- lib/legion/logging/logger.rb
|