makit 0.0.111 → 0.0.126
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/lib/makit/cli/repository_commands.rb +1 -1
- data/lib/makit/commands/middleware/cache.rb +3 -3
- data/lib/makit/commands/middleware/command_logger.rb +33 -45
- data/lib/makit/commands/request.rb +63 -1
- data/lib/makit/commands/runner.rb +56 -5
- data/lib/makit/commands/strategies/base.rb +13 -2
- data/lib/makit/commands/strategies/synchronous.rb +11 -6
- data/lib/makit/commands.rb +8 -0
- data/lib/makit/configuration/gitlab_helper.rb +0 -2
- data/lib/makit/configuration/project.rb +48 -8
- data/lib/makit/configuration/step.rb +3 -3
- data/lib/makit/content/default_gitignore.txt +226 -0
- data/lib/makit/directories.rb +3 -4
- data/lib/makit/docs/files.rb +1 -1
- data/lib/makit/docs/rake.rb +1 -1
- data/lib/makit/dotnet/cli.rb +69 -65
- data/lib/makit/dotnet/project.rb +71 -7
- data/lib/makit/examples/runner.rb +2 -2
- data/lib/makit/logging/configuration.rb +9 -6
- data/lib/makit/logging/format_registry.rb +84 -84
- data/lib/makit/logging/formatters/console_formatter.rb +22 -9
- data/lib/makit/logging/log_request.rb +6 -2
- data/lib/makit/logging/logger.rb +45 -5
- data/lib/makit/logging/sinks/base.rb +91 -91
- data/lib/makit/logging/sinks/structured.rb +123 -129
- data/lib/makit/logging/sinks/unified_file_sink.rb +39 -46
- data/lib/makit/logging.rb +45 -1
- data/lib/makit/mp/project_mp.rb +6 -6
- data/lib/makit/mp/string_mp.rb +108 -265
- data/lib/makit/serializer.rb +14 -1
- data/lib/makit/services/builder.rb +5 -5
- data/lib/makit/services/repository_manager.rb +8 -6
- data/lib/makit/setup/classlib.rb +44 -7
- data/lib/makit/setup/gem.rb +268 -250
- data/lib/makit/setup/razorclasslib.rb +91 -0
- data/lib/makit/setup/runner.rb +36 -22
- data/lib/makit/setup.rb +5 -0
- data/lib/makit/symbols.rb +10 -1
- data/lib/makit/tasks/at_exit.rb +3 -1
- data/lib/makit/tasks/build.rb +16 -12
- data/lib/makit/tasks/clean.rb +2 -0
- data/lib/makit/tasks/configure.rb +10 -0
- data/lib/makit/tasks/format.rb +10 -0
- data/lib/makit/tasks/hook_manager.rb +160 -8
- data/lib/makit/tasks/init.rb +2 -0
- data/lib/makit/tasks/integrate.rb +17 -3
- data/lib/makit/tasks/pull_incoming.rb +6 -5
- data/lib/makit/tasks/setup.rb +10 -3
- data/lib/makit/tasks/sync.rb +13 -7
- data/lib/makit/tasks/tag.rb +16 -0
- data/lib/makit/tasks/task_monkey_patch.rb +58 -56
- data/lib/makit/tasks/test.rb +22 -0
- data/lib/makit/tasks/update.rb +18 -0
- data/lib/makit/tasks.rb +20 -5
- data/lib/makit/v1/makit.v1_pb.rb +1 -0
- data/lib/makit/version.rb +1 -1
- data/lib/makit/version_util.rb +21 -0
- data/lib/makit copy.rb +44 -0
- data/lib/makit.rb +31 -0
- metadata +118 -13
- data/lib/makit/command_runner.rb +0 -463
- data/lib/makit/commands/compatibility.rb +0 -365
- data/lib/makit/commands/middleware/unified_logger.rb +0 -243
- data/lib/makit/task_hooks.rb +0 -125
@@ -1,84 +1,84 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Makit
|
4
|
-
module Logging
|
5
|
-
# Registry for managing available log formatters
|
6
|
-
#
|
7
|
-
# Provides a centralized way to register, retrieve, and manage formatters
|
8
|
-
# by name. This allows for easy extension and configuration of formatters.
|
9
|
-
#
|
10
|
-
# @example Registering a custom formatter
|
11
|
-
# FormatRegistry.register(:audit, AuditFormatter)
|
12
|
-
# formatter = FormatRegistry.get(:audit).new
|
13
|
-
#
|
14
|
-
# @example Using built-in formatters
|
15
|
-
# formatter = FormatRegistry.get(:json).new
|
16
|
-
# formatter = FormatRegistry.get(:text).new(timestamp_format: "%H:%M:%S")
|
17
|
-
class FormatRegistry
|
18
|
-
@formatters = {}
|
19
|
-
|
20
|
-
class << self
|
21
|
-
# @return [Hash] registered formatters
|
22
|
-
attr_reader :formatters
|
23
|
-
|
24
|
-
# Register a formatter class with a name
|
25
|
-
#
|
26
|
-
# @param name [Symbol, String] the name to register the formatter under
|
27
|
-
# @param formatter_class [Class] the formatter class to register
|
28
|
-
# @return [void]
|
29
|
-
def register(name, formatter_class)
|
30
|
-
@formatters[name.to_sym] = formatter_class
|
31
|
-
end
|
32
|
-
|
33
|
-
# Get a formatter class by name
|
34
|
-
#
|
35
|
-
# @param name [Symbol, String] the name of the formatter
|
36
|
-
# @return [Class] the formatter class
|
37
|
-
# @raise [ArgumentError] if formatter is not found
|
38
|
-
def get(name)
|
39
|
-
@formatters[name.to_sym] || raise(ArgumentError, "Unknown formatter: #{name}")
|
40
|
-
end
|
41
|
-
|
42
|
-
# Get all available formatter names
|
43
|
-
#
|
44
|
-
# @return [Array<Symbol>] list of registered formatter names
|
45
|
-
def available_formats
|
46
|
-
@formatters.keys
|
47
|
-
end
|
48
|
-
|
49
|
-
# Check if a formatter is registered
|
50
|
-
#
|
51
|
-
# @param name [Symbol, String] the name to check
|
52
|
-
# @return [Boolean] true if formatter is registered
|
53
|
-
def registered?(name)
|
54
|
-
@formatters.key?(name.to_sym)
|
55
|
-
end
|
56
|
-
|
57
|
-
# Clear all registered formatters
|
58
|
-
#
|
59
|
-
# @return [void]
|
60
|
-
def clear
|
61
|
-
@formatters.clear
|
62
|
-
end
|
63
|
-
|
64
|
-
# Register built-in formatters
|
65
|
-
#
|
66
|
-
# @return [void]
|
67
|
-
def register_built_ins
|
68
|
-
require_relative "formatters/json_formatter"
|
69
|
-
require_relative "formatters/text_formatter"
|
70
|
-
require_relative "formatters/plain_text_formatter"
|
71
|
-
require_relative "formatters/console_formatter"
|
72
|
-
|
73
|
-
register(:json, Formatters::JsonFormatter)
|
74
|
-
register(:text, Formatters::TextFormatter)
|
75
|
-
register(:plain, Formatters::PlainTextFormatter)
|
76
|
-
register(:console, Formatters::ConsoleFormatter)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
# Initialize registry with built-in formatters
|
81
|
-
register_built_ins
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Makit
|
4
|
+
module Logging
|
5
|
+
# Registry for managing available log formatters
|
6
|
+
#
|
7
|
+
# Provides a centralized way to register, retrieve, and manage formatters
|
8
|
+
# by name. This allows for easy extension and configuration of formatters.
|
9
|
+
#
|
10
|
+
# @example Registering a custom formatter
|
11
|
+
# FormatRegistry.register(:audit, AuditFormatter)
|
12
|
+
# formatter = FormatRegistry.get(:audit).new
|
13
|
+
#
|
14
|
+
# @example Using built-in formatters
|
15
|
+
# formatter = FormatRegistry.get(:json).new
|
16
|
+
# formatter = FormatRegistry.get(:text).new(timestamp_format: "%H:%M:%S")
|
17
|
+
class FormatRegistry
|
18
|
+
@formatters = {}
|
19
|
+
|
20
|
+
class << self
|
21
|
+
# @return [Hash] registered formatters
|
22
|
+
attr_reader :formatters
|
23
|
+
|
24
|
+
# Register a formatter class with a name
|
25
|
+
#
|
26
|
+
# @param name [Symbol, String] the name to register the formatter under
|
27
|
+
# @param formatter_class [Class] the formatter class to register
|
28
|
+
# @return [void]
|
29
|
+
def register(name, formatter_class)
|
30
|
+
@formatters[name.to_sym] = formatter_class
|
31
|
+
end
|
32
|
+
|
33
|
+
# Get a formatter class by name
|
34
|
+
#
|
35
|
+
# @param name [Symbol, String] the name of the formatter
|
36
|
+
# @return [Class] the formatter class
|
37
|
+
# @raise [ArgumentError] if formatter is not found
|
38
|
+
def get(name)
|
39
|
+
@formatters[name.to_sym] || raise(ArgumentError, "Unknown formatter: #{name}")
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get all available formatter names
|
43
|
+
#
|
44
|
+
# @return [Array<Symbol>] list of registered formatter names
|
45
|
+
def available_formats
|
46
|
+
@formatters.keys
|
47
|
+
end
|
48
|
+
|
49
|
+
# Check if a formatter is registered
|
50
|
+
#
|
51
|
+
# @param name [Symbol, String] the name to check
|
52
|
+
# @return [Boolean] true if formatter is registered
|
53
|
+
def registered?(name)
|
54
|
+
@formatters.key?(name.to_sym)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Clear all registered formatters
|
58
|
+
#
|
59
|
+
# @return [void]
|
60
|
+
def clear
|
61
|
+
@formatters.clear
|
62
|
+
end
|
63
|
+
|
64
|
+
# Register built-in formatters
|
65
|
+
#
|
66
|
+
# @return [void]
|
67
|
+
def register_built_ins
|
68
|
+
require_relative "formatters/json_formatter"
|
69
|
+
require_relative "formatters/text_formatter"
|
70
|
+
require_relative "formatters/plain_text_formatter"
|
71
|
+
require_relative "formatters/console_formatter"
|
72
|
+
|
73
|
+
register(:json, Formatters::JsonFormatter)
|
74
|
+
register(:text, Formatters::TextFormatter)
|
75
|
+
register(:plain, Formatters::PlainTextFormatter)
|
76
|
+
register(:console, Formatters::ConsoleFormatter)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Initialize registry with built-in formatters
|
81
|
+
register_built_ins
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -1,6 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
begin
|
4
|
+
require "colorize"
|
5
|
+
rescue LoadError
|
6
|
+
# colorize gem not available, define a no-op colorize method
|
7
|
+
class String
|
8
|
+
def colorize(*_args)
|
9
|
+
self
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
4
13
|
require_relative "base"
|
5
14
|
|
6
15
|
module Makit
|
@@ -55,14 +64,18 @@ module Makit
|
|
55
64
|
symbol_color = get_level_color(log_request.level)
|
56
65
|
message = log_request.message
|
57
66
|
|
58
|
-
#
|
59
|
-
if
|
60
|
-
|
61
|
-
|
67
|
+
# Special handling for task messages - no symbol, no context, just the message
|
68
|
+
if log_request.context[:task_message]
|
69
|
+
parts << message
|
70
|
+
else
|
71
|
+
# Add context if present (only for non-task messages)
|
72
|
+
unless log_request.context.empty?
|
73
|
+
context_str = log_request.context.map { |k, v| "#{k}=#{v}" }.join(" ")
|
74
|
+
message += " #{context_str}".colorize(:light_black)
|
75
|
+
end
|
76
|
+
parts << "#{symbol} #{message}".colorize(symbol_color)
|
62
77
|
end
|
63
78
|
|
64
|
-
parts << "#{symbol} #{message}".colorize(symbol_color)
|
65
|
-
|
66
79
|
parts.join(" ")
|
67
80
|
end
|
68
81
|
|
@@ -108,9 +121,9 @@ module Makit
|
|
108
121
|
when :debug
|
109
122
|
"•"
|
110
123
|
when :info
|
111
|
-
" " #"→"
|
124
|
+
" " # "→"
|
112
125
|
when :warn
|
113
|
-
"!" #"⚠"
|
126
|
+
"!" # "⚠"
|
114
127
|
when :error
|
115
128
|
"✗"
|
116
129
|
when :fatal
|
@@ -33,18 +33,22 @@ module Makit
|
|
33
33
|
|
34
34
|
# @return [Time] when the log request was created
|
35
35
|
attr_reader :timestamp
|
36
|
+
# @return [Symbol] the verbosity level (:quiet, :normal, :verbose, :debug)
|
37
|
+
attr_reader :verbosity
|
36
38
|
|
37
39
|
# Initialize a new log request
|
38
40
|
#
|
39
41
|
# @param level [Symbol] the log level
|
40
42
|
# @param message [String] the log message
|
41
43
|
# @param context [Hash] additional context information
|
42
|
-
|
44
|
+
# @param verbosity [Symbol] the verbosity level (:quiet, :normal, :verbose, :debug)
|
45
|
+
def initialize(level, message, context = {}, verbosity: :normal)
|
43
46
|
@level = level
|
44
47
|
@message = message
|
45
48
|
@context = context.dup
|
46
49
|
@metadata = {}
|
47
50
|
@timestamp = Time.now
|
51
|
+
@verbosity = verbosity
|
48
52
|
end
|
49
53
|
|
50
54
|
# Add metadata to the log request
|
@@ -71,7 +75,7 @@ module Makit
|
|
71
75
|
# Convert the log request to a JSON string
|
72
76
|
#
|
73
77
|
# @return [String] JSON representation of the log request
|
74
|
-
def to_json
|
78
|
+
def to_json(*_args)
|
75
79
|
require "json"
|
76
80
|
JSON.generate(to_h)
|
77
81
|
end
|
data/lib/makit/logging/logger.rb
CHANGED
@@ -35,14 +35,18 @@ module Makit
|
|
35
35
|
attr_reader :sinks
|
36
36
|
# @return [Symbol] minimum log level for filtering
|
37
37
|
attr_reader :level
|
38
|
+
# @return [Symbol] current verbosity level
|
39
|
+
attr_reader :verbosity
|
38
40
|
|
39
41
|
# Initialize the logger with sinks and log level
|
40
42
|
#
|
41
43
|
# @param sinks [Array<Sinks::Base>] list of sinks to use
|
42
44
|
# @param level [Symbol] minimum log level (:debug, :info, :warn, :error, :fatal, :success)
|
43
|
-
|
45
|
+
# @param verbosity [Symbol] verbosity level (:quiet, :normal, :verbose, :debug)
|
46
|
+
def initialize(sinks: [], level: :info, verbosity: :normal)
|
44
47
|
@sinks = sinks
|
45
48
|
@level = level
|
49
|
+
@verbosity = verbosity
|
46
50
|
@logged_tasks = Set.new
|
47
51
|
end
|
48
52
|
|
@@ -51,11 +55,13 @@ module Makit
|
|
51
55
|
# @param level [Symbol] the log level (:debug, :info, :warn, :error, :fatal, :success)
|
52
56
|
# @param message [String] the log message
|
53
57
|
# @param context [Hash] additional context information
|
58
|
+
# @param verbosity [Symbol] verbosity level (:quiet, :normal, :verbose, :debug)
|
54
59
|
# @return [void]
|
55
|
-
def log(level, message, context = {})
|
60
|
+
def log(level, message, context = {}, verbosity: :normal)
|
56
61
|
return unless should_log?(level)
|
62
|
+
return unless should_show_verbosity?(verbosity)
|
57
63
|
|
58
|
-
log_request = LogRequest.new(level, message, context)
|
64
|
+
log_request = LogRequest.new(level, message, context, verbosity: verbosity)
|
59
65
|
execute_sinks(log_request)
|
60
66
|
end
|
61
67
|
|
@@ -113,10 +119,33 @@ module Makit
|
|
113
119
|
log(:fatal, message, context)
|
114
120
|
end
|
115
121
|
|
122
|
+
# Log a verbose message (only shown in verbose or debug mode)
|
123
|
+
#
|
124
|
+
# @param message [String] the log message
|
125
|
+
# @param context [Hash] additional context information
|
126
|
+
# @return [void]
|
127
|
+
def verbose(message, context = {})
|
128
|
+
log(:info, message, context, verbosity: :verbose)
|
129
|
+
end
|
130
|
+
|
131
|
+
# Log a quiet message (shown even in quiet mode)
|
132
|
+
#
|
133
|
+
# @param message [String] the log message
|
134
|
+
# @param context [Hash] additional context information
|
135
|
+
# @return [void]
|
136
|
+
def quiet(message, context = {})
|
137
|
+
log(:info, message, context, verbosity: :quiet)
|
138
|
+
end
|
139
|
+
|
116
140
|
def task_start(message, context = {})
|
117
141
|
return if @logged_tasks.include?(message)
|
142
|
+
|
118
143
|
@logged_tasks.add(message)
|
119
|
-
|
144
|
+
# Format task name with colon prefix and bold white styling
|
145
|
+
formatted_message = ": #{message}".colorize(:white).bold
|
146
|
+
# Add special context to identify task messages
|
147
|
+
task_context = context.merge(task_message: true)
|
148
|
+
log(:info, formatted_message, task_context)
|
120
149
|
end
|
121
150
|
|
122
151
|
# Get logger configuration
|
@@ -137,10 +166,21 @@ module Makit
|
|
137
166
|
# @param level [Symbol] the log level to check
|
138
167
|
# @return [Boolean] true if the level should be logged
|
139
168
|
def should_log?(level)
|
140
|
-
levels = [
|
169
|
+
levels = %i[debug info warn error fatal success]
|
141
170
|
levels.index(level) >= levels.index(@level)
|
142
171
|
end
|
143
172
|
|
173
|
+
# Check if a verbosity level should be shown
|
174
|
+
#
|
175
|
+
# @param verbosity [Symbol] the verbosity level to check
|
176
|
+
# @return [Boolean] true if the verbosity should be shown
|
177
|
+
def should_show_verbosity?(verbosity)
|
178
|
+
verbosity_levels = %i[quiet normal verbose debug]
|
179
|
+
verbosity_index = verbosity_levels.index(verbosity) || 1 # default to normal
|
180
|
+
current_index = verbosity_levels.index(@verbosity) || 1
|
181
|
+
verbosity_index <= current_index
|
182
|
+
end
|
183
|
+
|
144
184
|
# Execute the sink chain for a log request
|
145
185
|
#
|
146
186
|
# @param log_request [LogRequest] the log request to process
|
@@ -1,91 +1,91 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Makit
|
4
|
-
module Logging
|
5
|
-
module Sinks
|
6
|
-
# Base class for all logging sinks
|
7
|
-
#
|
8
|
-
# Sinks provide a way to output log requests to various destinations like
|
9
|
-
# console, files, or external services. This follows the same pattern as
|
10
|
-
# the commands middleware but focuses on output rather than transformation.
|
11
|
-
#
|
12
|
-
# @example Creating a custom logging sink
|
13
|
-
# class CustomSink < Base
|
14
|
-
# def call(log_request, &block)
|
15
|
-
# # Output the log request
|
16
|
-
# output_log(log_request)
|
17
|
-
#
|
18
|
-
# # Continue to next sink
|
19
|
-
# block.call(log_request) if block_given?
|
20
|
-
# end
|
21
|
-
# end
|
22
|
-
class Base
|
23
|
-
# Execute sink logic
|
24
|
-
#
|
25
|
-
# This method must be implemented by subclasses to provide the actual
|
26
|
-
# sink functionality. The pattern is to output the log request to the
|
27
|
-
# destination, then call the block to continue the sink chain.
|
28
|
-
#
|
29
|
-
# @param log_request [LogRequest] the log request to process
|
30
|
-
# @yield [LogRequest] yields the processed log request to the next sink
|
31
|
-
# @yieldreturn [LogRequest] the processed log request
|
32
|
-
# @return [LogRequest] the final processed log request
|
33
|
-
# @raise [NotImplementedError] if not overridden by subclass
|
34
|
-
def call(log_request, &block)
|
35
|
-
raise NotImplementedError, "#{self.class.name} must implement #call"
|
36
|
-
end
|
37
|
-
|
38
|
-
# Check if this sink should be applied to the given log request
|
39
|
-
#
|
40
|
-
# Override this method to provide conditional sink application
|
41
|
-
# based on log request properties like level, message, or context.
|
42
|
-
#
|
43
|
-
# @param log_request [LogRequest] the log request
|
44
|
-
# @return [Boolean] true if sink should be applied
|
45
|
-
def applicable?(
|
46
|
-
true
|
47
|
-
end
|
48
|
-
|
49
|
-
# Get sink name for logging and debugging
|
50
|
-
#
|
51
|
-
# @return [String] sink name
|
52
|
-
def name
|
53
|
-
self.class.name.split("::").last
|
54
|
-
end
|
55
|
-
|
56
|
-
# Get sink configuration
|
57
|
-
#
|
58
|
-
# Override this method to provide sink-specific configuration.
|
59
|
-
#
|
60
|
-
# @return [Hash] sink configuration
|
61
|
-
def config
|
62
|
-
{}
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
|
67
|
-
# Pre-process the log request before outputting
|
68
|
-
#
|
69
|
-
# Override this method to modify the log request before it is output
|
70
|
-
# to the destination.
|
71
|
-
#
|
72
|
-
# @param log_request [LogRequest] the log request
|
73
|
-
# @return [LogRequest] the modified log request
|
74
|
-
def pre_process(log_request)
|
75
|
-
log_request
|
76
|
-
end
|
77
|
-
|
78
|
-
# Post-process the log request after outputting
|
79
|
-
#
|
80
|
-
# Override this method to perform any final processing after the
|
81
|
-
# log request has been output to the destination.
|
82
|
-
#
|
83
|
-
# @param log_request [LogRequest] the log request
|
84
|
-
# @return [LogRequest] the final log request
|
85
|
-
def post_process(log_request)
|
86
|
-
log_request
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Makit
|
4
|
+
module Logging
|
5
|
+
module Sinks
|
6
|
+
# Base class for all logging sinks
|
7
|
+
#
|
8
|
+
# Sinks provide a way to output log requests to various destinations like
|
9
|
+
# console, files, or external services. This follows the same pattern as
|
10
|
+
# the commands middleware but focuses on output rather than transformation.
|
11
|
+
#
|
12
|
+
# @example Creating a custom logging sink
|
13
|
+
# class CustomSink < Base
|
14
|
+
# def call(log_request, &block)
|
15
|
+
# # Output the log request
|
16
|
+
# output_log(log_request)
|
17
|
+
#
|
18
|
+
# # Continue to next sink
|
19
|
+
# block.call(log_request) if block_given?
|
20
|
+
# end
|
21
|
+
# end
|
22
|
+
class Base
|
23
|
+
# Execute sink logic
|
24
|
+
#
|
25
|
+
# This method must be implemented by subclasses to provide the actual
|
26
|
+
# sink functionality. The pattern is to output the log request to the
|
27
|
+
# destination, then call the block to continue the sink chain.
|
28
|
+
#
|
29
|
+
# @param log_request [LogRequest] the log request to process
|
30
|
+
# @yield [LogRequest] yields the processed log request to the next sink
|
31
|
+
# @yieldreturn [LogRequest] the processed log request
|
32
|
+
# @return [LogRequest] the final processed log request
|
33
|
+
# @raise [NotImplementedError] if not overridden by subclass
|
34
|
+
def call(log_request, &block)
|
35
|
+
raise NotImplementedError, "#{self.class.name} must implement #call"
|
36
|
+
end
|
37
|
+
|
38
|
+
# Check if this sink should be applied to the given log request
|
39
|
+
#
|
40
|
+
# Override this method to provide conditional sink application
|
41
|
+
# based on log request properties like level, message, or context.
|
42
|
+
#
|
43
|
+
# @param log_request [LogRequest] the log request
|
44
|
+
# @return [Boolean] true if sink should be applied
|
45
|
+
def applicable?(_log_request)
|
46
|
+
true
|
47
|
+
end
|
48
|
+
|
49
|
+
# Get sink name for logging and debugging
|
50
|
+
#
|
51
|
+
# @return [String] sink name
|
52
|
+
def name
|
53
|
+
self.class.name.split("::").last
|
54
|
+
end
|
55
|
+
|
56
|
+
# Get sink configuration
|
57
|
+
#
|
58
|
+
# Override this method to provide sink-specific configuration.
|
59
|
+
#
|
60
|
+
# @return [Hash] sink configuration
|
61
|
+
def config
|
62
|
+
{}
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
# Pre-process the log request before outputting
|
68
|
+
#
|
69
|
+
# Override this method to modify the log request before it is output
|
70
|
+
# to the destination.
|
71
|
+
#
|
72
|
+
# @param log_request [LogRequest] the log request
|
73
|
+
# @return [LogRequest] the modified log request
|
74
|
+
def pre_process(log_request)
|
75
|
+
log_request
|
76
|
+
end
|
77
|
+
|
78
|
+
# Post-process the log request after outputting
|
79
|
+
#
|
80
|
+
# Override this method to perform any final processing after the
|
81
|
+
# log request has been output to the destination.
|
82
|
+
#
|
83
|
+
# @param log_request [LogRequest] the log request
|
84
|
+
# @return [LogRequest] the final log request
|
85
|
+
def post_process(log_request)
|
86
|
+
log_request
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|