makit 0.0.112 → 0.0.128
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/README.md +41 -41
- data/exe/makit +5 -5
- data/lib/makit/apache.rb +28 -28
- data/lib/makit/cli/build_commands.rb +500 -500
- data/lib/makit/cli/generators/base_generator.rb +74 -74
- data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
- data/lib/makit/cli/generators/generator_factory.rb +49 -49
- data/lib/makit/cli/generators/node_generator.rb +50 -50
- data/lib/makit/cli/generators/ruby_generator.rb +77 -77
- data/lib/makit/cli/generators/rust_generator.rb +50 -50
- data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
- data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
- data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
- data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -40
- data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
- data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
- data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
- data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
- data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
- data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
- data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
- data/lib/makit/cli/main.rb +62 -62
- data/lib/makit/cli/project_commands.rb +868 -868
- data/lib/makit/cli/repository_commands.rb +661 -661
- data/lib/makit/cli/utility_commands.rb +521 -521
- data/lib/makit/commands/factory.rb +359 -359
- data/lib/makit/commands/middleware/base.rb +73 -73
- data/lib/makit/commands/middleware/cache.rb +248 -248
- data/lib/makit/commands/middleware/command_logger.rb +311 -320
- data/lib/makit/commands/middleware/validator.rb +269 -269
- data/lib/makit/commands/request.rb +316 -254
- data/lib/makit/commands/result.rb +323 -323
- data/lib/makit/commands/runner.rb +368 -337
- data/lib/makit/commands/strategies/base.rb +171 -160
- data/lib/makit/commands/strategies/synchronous.rb +139 -134
- data/lib/makit/commands.rb +50 -51
- data/lib/makit/configuration/gitlab_helper.rb +58 -60
- data/lib/makit/configuration/project.rb +167 -127
- data/lib/makit/configuration/rakefile_helper.rb +43 -43
- data/lib/makit/configuration/step.rb +34 -34
- data/lib/makit/configuration.rb +14 -14
- data/lib/makit/content/default_gitignore.rb +7 -7
- data/lib/makit/content/default_gitignore.txt +226 -0
- data/lib/makit/content/default_rakefile.rb +13 -13
- data/lib/makit/content/gem_rakefile.rb +16 -16
- data/lib/makit/context.rb +1 -1
- data/lib/makit/data.rb +49 -49
- data/lib/makit/directories.rb +140 -141
- data/lib/makit/directory.rb +262 -262
- data/lib/makit/docs/files.rb +89 -89
- data/lib/makit/docs/rake.rb +102 -102
- data/lib/makit/dotnet/cli.rb +69 -65
- data/lib/makit/dotnet/project.rb +217 -153
- data/lib/makit/dotnet/solution.rb +38 -38
- data/lib/makit/dotnet/solution_classlib.rb +239 -239
- data/lib/makit/dotnet/solution_console.rb +264 -264
- data/lib/makit/dotnet/solution_maui.rb +354 -354
- data/lib/makit/dotnet/solution_wasm.rb +275 -275
- data/lib/makit/dotnet/solution_wpf.rb +304 -304
- data/lib/makit/dotnet.rb +102 -102
- data/lib/makit/email.rb +90 -90
- data/lib/makit/environment.rb +142 -142
- data/lib/makit/examples/runner.rb +370 -370
- data/lib/makit/exceptions.rb +45 -45
- data/lib/makit/fileinfo.rb +24 -24
- data/lib/makit/files.rb +43 -43
- data/lib/makit/gems.rb +40 -40
- data/lib/makit/git/cli.rb +54 -54
- data/lib/makit/git/repository.rb +90 -90
- data/lib/makit/git.rb +98 -98
- data/lib/makit/gitlab_runner.rb +59 -59
- data/lib/makit/humanize.rb +137 -137
- data/lib/makit/indexer.rb +47 -47
- data/lib/makit/logging/configuration.rb +308 -305
- data/lib/makit/logging/format_registry.rb +84 -84
- data/lib/makit/logging/formatters/base.rb +39 -39
- data/lib/makit/logging/formatters/console_formatter.rb +140 -140
- data/lib/makit/logging/formatters/json_formatter.rb +65 -65
- data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
- data/lib/makit/logging/formatters/text_formatter.rb +64 -64
- data/lib/makit/logging/log_request.rb +119 -115
- data/lib/makit/logging/logger.rb +199 -163
- data/lib/makit/logging/sinks/base.rb +91 -91
- data/lib/makit/logging/sinks/console.rb +72 -72
- data/lib/makit/logging/sinks/file_sink.rb +92 -92
- data/lib/makit/logging/sinks/structured.rb +123 -129
- data/lib/makit/logging/sinks/unified_file_sink.rb +296 -303
- data/lib/makit/logging.rb +565 -530
- data/lib/makit/markdown.rb +75 -75
- data/lib/makit/mp/basic_object_mp.rb +17 -17
- data/lib/makit/mp/command_mp.rb +13 -13
- data/lib/makit/mp/command_request.mp.rb +17 -17
- data/lib/makit/mp/project_mp.rb +199 -199
- data/lib/makit/mp/string_mp.rb +191 -193
- data/lib/makit/nuget.rb +74 -74
- data/lib/makit/port.rb +32 -32
- data/lib/makit/process.rb +163 -163
- data/lib/makit/protoc.rb +107 -107
- data/lib/makit/rake/cli.rb +196 -196
- data/lib/makit/rake.rb +25 -25
- data/lib/makit/ruby/cli.rb +185 -185
- data/lib/makit/ruby.rb +25 -25
- data/lib/makit/secrets.rb +51 -51
- data/lib/makit/serializer.rb +130 -130
- data/lib/makit/services/builder.rb +186 -186
- data/lib/makit/services/error_handler.rb +226 -226
- data/lib/makit/services/repository_manager.rb +231 -229
- data/lib/makit/services/validator.rb +112 -112
- data/lib/makit/setup/classlib.rb +94 -53
- data/lib/makit/setup/gem.rb +268 -263
- data/lib/makit/setup/razorclasslib.rb +91 -0
- data/lib/makit/setup/runner.rb +54 -45
- data/lib/makit/setup.rb +5 -5
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -126
- data/lib/makit/symbols.rb +170 -170
- data/lib/makit/task_info.rb +128 -128
- data/lib/makit/tasks/at_exit.rb +15 -13
- data/lib/makit/tasks/build.rb +22 -19
- data/lib/makit/tasks/clean.rb +13 -11
- data/lib/makit/tasks/configure.rb +10 -0
- data/lib/makit/tasks/format.rb +10 -0
- data/lib/makit/tasks/hook_manager.rb +391 -393
- data/lib/makit/tasks/init.rb +49 -47
- data/lib/makit/tasks/integrate.rb +29 -17
- data/lib/makit/tasks/pull_incoming.rb +13 -11
- data/lib/makit/tasks/setup.rb +13 -6
- data/lib/makit/tasks/sync.rb +17 -12
- data/lib/makit/tasks/tag.rb +16 -15
- data/lib/makit/tasks/task_monkey_patch.rb +81 -79
- data/lib/makit/tasks/test.rb +22 -0
- data/lib/makit/tasks/update.rb +18 -0
- data/lib/makit/tasks.rb +20 -15
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/makit.v1_pb.rb +35 -34
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/version.rb +5 -5
- data/lib/makit/version_util.rb +21 -21
- data/lib/makit/wix.rb +95 -95
- data/lib/makit/yaml.rb +29 -29
- data/lib/makit/zip.rb +17 -17
- data/lib/makit copy.rb +44 -44
- data/lib/makit.rb +39 -40
- metadata +69 -7
- data/lib/makit/commands/middleware/unified_logger.rb +0 -243
data/lib/makit/logging/logger.rb
CHANGED
@@ -1,163 +1,199 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "set"
|
4
|
-
require_relative "log_request"
|
5
|
-
require_relative "sinks/base"
|
6
|
-
require_relative "sinks/console"
|
7
|
-
require_relative "sinks/file_sink"
|
8
|
-
require_relative "sinks/structured"
|
9
|
-
|
10
|
-
module Makit
|
11
|
-
module Logging
|
12
|
-
# Main logger class that orchestrates logging through sinks
|
13
|
-
#
|
14
|
-
# This class provides a clean interface for logging with support for
|
15
|
-
# sink-based output processing. It follows the same pattern as the
|
16
|
-
# Commands::Runner but for logging operations.
|
17
|
-
#
|
18
|
-
# @example Basic usage
|
19
|
-
# logger = Logger.new
|
20
|
-
# logger.info("Processing started")
|
21
|
-
#
|
22
|
-
# @example With custom sinks
|
23
|
-
# logger = Logger.new(
|
24
|
-
# sinks: [
|
25
|
-
# Sinks::Console.new,
|
26
|
-
# Sinks::File.new(log_file: "custom.log")
|
27
|
-
# ]
|
28
|
-
# )
|
29
|
-
#
|
30
|
-
# @example Using convenience methods
|
31
|
-
# logger.success("Build completed")
|
32
|
-
# logger.error("Build failed", { repository: "user/repo" })
|
33
|
-
class Logger
|
34
|
-
# @return [Array<Sinks::Base>] list of sinks to process log requests
|
35
|
-
attr_reader :sinks
|
36
|
-
# @return [Symbol] minimum log level for filtering
|
37
|
-
attr_reader :level
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
#
|
42
|
-
#
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
#
|
54
|
-
#
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
#
|
72
|
-
#
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
#
|
81
|
-
#
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
#
|
90
|
-
#
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
#
|
99
|
-
#
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
#
|
108
|
-
#
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
#
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
#
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
end
|
161
|
-
|
162
|
-
|
163
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "set"
|
4
|
+
require_relative "log_request"
|
5
|
+
require_relative "sinks/base"
|
6
|
+
require_relative "sinks/console"
|
7
|
+
require_relative "sinks/file_sink"
|
8
|
+
require_relative "sinks/structured"
|
9
|
+
|
10
|
+
module Makit
|
11
|
+
module Logging
|
12
|
+
# Main logger class that orchestrates logging through sinks
|
13
|
+
#
|
14
|
+
# This class provides a clean interface for logging with support for
|
15
|
+
# sink-based output processing. It follows the same pattern as the
|
16
|
+
# Commands::Runner but for logging operations.
|
17
|
+
#
|
18
|
+
# @example Basic usage
|
19
|
+
# logger = Logger.new
|
20
|
+
# logger.info("Processing started")
|
21
|
+
#
|
22
|
+
# @example With custom sinks
|
23
|
+
# logger = Logger.new(
|
24
|
+
# sinks: [
|
25
|
+
# Sinks::Console.new,
|
26
|
+
# Sinks::File.new(log_file: "custom.log")
|
27
|
+
# ]
|
28
|
+
# )
|
29
|
+
#
|
30
|
+
# @example Using convenience methods
|
31
|
+
# logger.success("Build completed")
|
32
|
+
# logger.error("Build failed", { repository: "user/repo" })
|
33
|
+
class Logger
|
34
|
+
# @return [Array<Sinks::Base>] list of sinks to process log requests
|
35
|
+
attr_reader :sinks
|
36
|
+
# @return [Symbol] minimum log level for filtering
|
37
|
+
attr_reader :level
|
38
|
+
# @return [Symbol] current verbosity level
|
39
|
+
attr_reader :verbosity
|
40
|
+
|
41
|
+
# Initialize the logger with sinks and log level
|
42
|
+
#
|
43
|
+
# @param sinks [Array<Sinks::Base>] list of sinks to use
|
44
|
+
# @param level [Symbol] minimum log level (:debug, :info, :warn, :error, :fatal, :success)
|
45
|
+
# @param verbosity [Symbol] verbosity level (:quiet, :normal, :verbose, :debug)
|
46
|
+
def initialize(sinks: [], level: :info, verbosity: :normal)
|
47
|
+
@sinks = sinks
|
48
|
+
@level = level
|
49
|
+
@verbosity = verbosity
|
50
|
+
@logged_tasks = Set.new
|
51
|
+
end
|
52
|
+
|
53
|
+
# Log a message with the specified level
|
54
|
+
#
|
55
|
+
# @param level [Symbol] the log level (:debug, :info, :warn, :error, :fatal, :success)
|
56
|
+
# @param message [String] the log message
|
57
|
+
# @param context [Hash] additional context information
|
58
|
+
# @param verbosity [Symbol] verbosity level (:quiet, :normal, :verbose, :debug)
|
59
|
+
# @return [void]
|
60
|
+
def log(level, message, context = {}, verbosity: :normal)
|
61
|
+
return unless should_log?(level)
|
62
|
+
return unless should_show_verbosity?(verbosity)
|
63
|
+
|
64
|
+
log_request = LogRequest.new(level, message, context, verbosity: verbosity)
|
65
|
+
execute_sinks(log_request)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Log an info message
|
69
|
+
#
|
70
|
+
# @param message [String] the log message
|
71
|
+
# @param context [Hash] additional context information
|
72
|
+
# @return [void]
|
73
|
+
def info(message, context = {})
|
74
|
+
log(:info, message, context)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Log a success message
|
78
|
+
#
|
79
|
+
# @param message [String] the log message
|
80
|
+
# @param context [Hash] additional context information
|
81
|
+
# @return [void]
|
82
|
+
def success(message, context = {})
|
83
|
+
log(:success, message, context)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Log an error message
|
87
|
+
#
|
88
|
+
# @param message [String] the log message
|
89
|
+
# @param context [Hash] additional context information
|
90
|
+
# @return [void]
|
91
|
+
def error(message, context = {})
|
92
|
+
log(:error, message, context)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Log a warning message
|
96
|
+
#
|
97
|
+
# @param message [String] the log message
|
98
|
+
# @param context [Hash] additional context information
|
99
|
+
# @return [void]
|
100
|
+
def warn(message, context = {})
|
101
|
+
log(:warn, message, context)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Log a debug message
|
105
|
+
#
|
106
|
+
# @param message [String] the log message
|
107
|
+
# @param context [Hash] additional context information
|
108
|
+
# @return [void]
|
109
|
+
def debug(message, context = {})
|
110
|
+
log(:debug, message, context)
|
111
|
+
end
|
112
|
+
|
113
|
+
# Log a fatal message
|
114
|
+
#
|
115
|
+
# @param message [String] the log message
|
116
|
+
# @param context [Hash] additional context information
|
117
|
+
# @return [void]
|
118
|
+
def fatal(message, context = {})
|
119
|
+
log(:fatal, message, context)
|
120
|
+
end
|
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
|
+
|
140
|
+
def task_start(message, context = {})
|
141
|
+
return if @logged_tasks.include?(message)
|
142
|
+
|
143
|
+
@logged_tasks.add(message)
|
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)
|
149
|
+
end
|
150
|
+
|
151
|
+
# Get logger configuration
|
152
|
+
#
|
153
|
+
# @return [Hash] logger configuration
|
154
|
+
def config
|
155
|
+
{
|
156
|
+
level: @level,
|
157
|
+
sinks_count: @sinks.length,
|
158
|
+
sinks: @sinks.map(&:config),
|
159
|
+
}
|
160
|
+
end
|
161
|
+
|
162
|
+
private
|
163
|
+
|
164
|
+
# Check if a log level should be processed
|
165
|
+
#
|
166
|
+
# @param level [Symbol] the log level to check
|
167
|
+
# @return [Boolean] true if the level should be logged
|
168
|
+
def should_log?(level)
|
169
|
+
levels = %i[debug info warn error fatal success]
|
170
|
+
levels.index(level) >= levels.index(@level)
|
171
|
+
end
|
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
|
+
|
184
|
+
# Execute the sink chain for a log request
|
185
|
+
#
|
186
|
+
# @param log_request [LogRequest] the log request to process
|
187
|
+
# @return [void]
|
188
|
+
def execute_sinks(log_request)
|
189
|
+
# Filter applicable sinks
|
190
|
+
applicable_sinks = @sinks.select { |s| s.applicable?(log_request) }
|
191
|
+
|
192
|
+
# Execute sink chain
|
193
|
+
applicable_sinks.reduce(log_request) do |request, sink|
|
194
|
+
sink.call(request)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
@@ -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
|