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
@@ -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,39 +1,39 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Makit
|
4
|
-
module Logging
|
5
|
-
module Formatters
|
6
|
-
# Base class for all logging formatters
|
7
|
-
#
|
8
|
-
# Formatters handle the conversion of log requests into formatted strings
|
9
|
-
# that can be written to various outputs (console, files, etc.).
|
10
|
-
# This separates formatting concerns from output routing concerns.
|
11
|
-
#
|
12
|
-
# @example Creating a custom formatter
|
13
|
-
# class CustomFormatter < Base
|
14
|
-
# def format(log_request)
|
15
|
-
# "#{log_request.level.upcase}: #{log_request.message}"
|
16
|
-
# end
|
17
|
-
# end
|
18
|
-
class Base
|
19
|
-
# Format a log request into a string
|
20
|
-
#
|
21
|
-
# @param log_request [LogRequest] the log request to format
|
22
|
-
# @return [String] the formatted log entry
|
23
|
-
def format(log_request)
|
24
|
-
raise NotImplementedError, "Subclasses must implement #format"
|
25
|
-
end
|
26
|
-
|
27
|
-
# Get formatter configuration
|
28
|
-
#
|
29
|
-
# @return [Hash] formatter configuration
|
30
|
-
def config
|
31
|
-
{
|
32
|
-
name: self.class.name.split("::").last,
|
33
|
-
type: self.class.name,
|
34
|
-
}
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Makit
|
4
|
+
module Logging
|
5
|
+
module Formatters
|
6
|
+
# Base class for all logging formatters
|
7
|
+
#
|
8
|
+
# Formatters handle the conversion of log requests into formatted strings
|
9
|
+
# that can be written to various outputs (console, files, etc.).
|
10
|
+
# This separates formatting concerns from output routing concerns.
|
11
|
+
#
|
12
|
+
# @example Creating a custom formatter
|
13
|
+
# class CustomFormatter < Base
|
14
|
+
# def format(log_request)
|
15
|
+
# "#{log_request.level.upcase}: #{log_request.message}"
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
class Base
|
19
|
+
# Format a log request into a string
|
20
|
+
#
|
21
|
+
# @param log_request [LogRequest] the log request to format
|
22
|
+
# @return [String] the formatted log entry
|
23
|
+
def format(log_request)
|
24
|
+
raise NotImplementedError, "Subclasses must implement #format"
|
25
|
+
end
|
26
|
+
|
27
|
+
# Get formatter configuration
|
28
|
+
#
|
29
|
+
# @return [Hash] formatter configuration
|
30
|
+
def config
|
31
|
+
{
|
32
|
+
name: self.class.name.split("::").last,
|
33
|
+
type: self.class.name,
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,140 +1,140 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
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(*
|
9
|
-
self
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
require_relative "base"
|
14
|
-
|
15
|
-
module Makit
|
16
|
-
module Logging
|
17
|
-
module Formatters
|
18
|
-
# Console formatter for colored log output
|
19
|
-
#
|
20
|
-
# Formats log requests for console display with colors, symbols, and optional
|
21
|
-
# timestamps/levels. This is specifically designed for human-readable console output.
|
22
|
-
#
|
23
|
-
# @example
|
24
|
-
# formatter = ConsoleFormatter.new
|
25
|
-
# formatted = formatter.format(log_request)
|
26
|
-
# # => "→ Processing started" (with appropriate color)
|
27
|
-
class ConsoleFormatter < Base
|
28
|
-
# @return [Boolean] whether to show timestamps
|
29
|
-
attr_reader :show_timestamp
|
30
|
-
# @return [Boolean] whether to show log levels
|
31
|
-
attr_reader :show_level
|
32
|
-
|
33
|
-
# Initialize console formatter
|
34
|
-
#
|
35
|
-
# @param show_timestamp [Boolean] whether to show timestamps (default: false)
|
36
|
-
# @param show_level [Boolean] whether to show log levels (default: false)
|
37
|
-
def initialize(show_timestamp: false, show_level: false)
|
38
|
-
@show_timestamp = show_timestamp
|
39
|
-
@show_level = show_level
|
40
|
-
end
|
41
|
-
|
42
|
-
# Format log request for console display
|
43
|
-
#
|
44
|
-
# @param log_request [LogRequest] the log request to format
|
45
|
-
# @return [String] console formatted log entry with colors
|
46
|
-
def format(log_request)
|
47
|
-
parts = []
|
48
|
-
|
49
|
-
# Add timestamp if enabled
|
50
|
-
if @show_timestamp
|
51
|
-
timestamp = log_request.timestamp.strftime("%H:%M:%S")
|
52
|
-
parts << "[#{timestamp}]".colorize(:light_black)
|
53
|
-
end
|
54
|
-
|
55
|
-
# Add log level if enabled
|
56
|
-
if @show_level
|
57
|
-
level_str = log_request.level.to_s.upcase
|
58
|
-
level_color = get_level_color(log_request.level)
|
59
|
-
parts << level_str.colorize(level_color)
|
60
|
-
end
|
61
|
-
|
62
|
-
# Add symbol and message
|
63
|
-
symbol = get_level_symbol(log_request.level)
|
64
|
-
symbol_color = get_level_color(log_request.level)
|
65
|
-
message = log_request.message
|
66
|
-
|
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
|
-
|
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)
|
77
|
-
end
|
78
|
-
|
79
|
-
parts.join(" ")
|
80
|
-
end
|
81
|
-
|
82
|
-
# Get formatter configuration
|
83
|
-
#
|
84
|
-
# @return [Hash] formatter configuration
|
85
|
-
def config
|
86
|
-
super.merge(
|
87
|
-
show_timestamp: @show_timestamp,
|
88
|
-
show_level: @show_level,
|
89
|
-
)
|
90
|
-
end
|
91
|
-
|
92
|
-
private
|
93
|
-
|
94
|
-
# Get the color for a log level
|
95
|
-
#
|
96
|
-
# @param level [Symbol] the log level
|
97
|
-
# @return [Symbol] the color for the level
|
98
|
-
def get_level_color(level)
|
99
|
-
case level
|
100
|
-
when :debug
|
101
|
-
:grey
|
102
|
-
when :info
|
103
|
-
:grey
|
104
|
-
when :warn
|
105
|
-
:light_yellow
|
106
|
-
when :error, :fatal
|
107
|
-
:light_red
|
108
|
-
when :success
|
109
|
-
:green
|
110
|
-
else
|
111
|
-
:white
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
# Get the symbol for a log level
|
116
|
-
#
|
117
|
-
# @param level [Symbol] the log level
|
118
|
-
# @return [String] the symbol for the level
|
119
|
-
def get_level_symbol(level)
|
120
|
-
case level
|
121
|
-
when :debug
|
122
|
-
"•"
|
123
|
-
when :info
|
124
|
-
" " #"→"
|
125
|
-
when :warn
|
126
|
-
"!" #"⚠"
|
127
|
-
when :error
|
128
|
-
"✗"
|
129
|
-
when :fatal
|
130
|
-
"💀"
|
131
|
-
when :success
|
132
|
-
"✓"
|
133
|
-
else
|
134
|
-
"•"
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
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
|
13
|
+
require_relative "base"
|
14
|
+
|
15
|
+
module Makit
|
16
|
+
module Logging
|
17
|
+
module Formatters
|
18
|
+
# Console formatter for colored log output
|
19
|
+
#
|
20
|
+
# Formats log requests for console display with colors, symbols, and optional
|
21
|
+
# timestamps/levels. This is specifically designed for human-readable console output.
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
# formatter = ConsoleFormatter.new
|
25
|
+
# formatted = formatter.format(log_request)
|
26
|
+
# # => "→ Processing started" (with appropriate color)
|
27
|
+
class ConsoleFormatter < Base
|
28
|
+
# @return [Boolean] whether to show timestamps
|
29
|
+
attr_reader :show_timestamp
|
30
|
+
# @return [Boolean] whether to show log levels
|
31
|
+
attr_reader :show_level
|
32
|
+
|
33
|
+
# Initialize console formatter
|
34
|
+
#
|
35
|
+
# @param show_timestamp [Boolean] whether to show timestamps (default: false)
|
36
|
+
# @param show_level [Boolean] whether to show log levels (default: false)
|
37
|
+
def initialize(show_timestamp: false, show_level: false)
|
38
|
+
@show_timestamp = show_timestamp
|
39
|
+
@show_level = show_level
|
40
|
+
end
|
41
|
+
|
42
|
+
# Format log request for console display
|
43
|
+
#
|
44
|
+
# @param log_request [LogRequest] the log request to format
|
45
|
+
# @return [String] console formatted log entry with colors
|
46
|
+
def format(log_request)
|
47
|
+
parts = []
|
48
|
+
|
49
|
+
# Add timestamp if enabled
|
50
|
+
if @show_timestamp
|
51
|
+
timestamp = log_request.timestamp.strftime("%H:%M:%S")
|
52
|
+
parts << "[#{timestamp}]".colorize(:light_black)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Add log level if enabled
|
56
|
+
if @show_level
|
57
|
+
level_str = log_request.level.to_s.upcase
|
58
|
+
level_color = get_level_color(log_request.level)
|
59
|
+
parts << level_str.colorize(level_color)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Add symbol and message
|
63
|
+
symbol = get_level_symbol(log_request.level)
|
64
|
+
symbol_color = get_level_color(log_request.level)
|
65
|
+
message = log_request.message
|
66
|
+
|
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)
|
77
|
+
end
|
78
|
+
|
79
|
+
parts.join(" ")
|
80
|
+
end
|
81
|
+
|
82
|
+
# Get formatter configuration
|
83
|
+
#
|
84
|
+
# @return [Hash] formatter configuration
|
85
|
+
def config
|
86
|
+
super.merge(
|
87
|
+
show_timestamp: @show_timestamp,
|
88
|
+
show_level: @show_level,
|
89
|
+
)
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
# Get the color for a log level
|
95
|
+
#
|
96
|
+
# @param level [Symbol] the log level
|
97
|
+
# @return [Symbol] the color for the level
|
98
|
+
def get_level_color(level)
|
99
|
+
case level
|
100
|
+
when :debug
|
101
|
+
:grey
|
102
|
+
when :info
|
103
|
+
:grey
|
104
|
+
when :warn
|
105
|
+
:light_yellow
|
106
|
+
when :error, :fatal
|
107
|
+
:light_red
|
108
|
+
when :success
|
109
|
+
:green
|
110
|
+
else
|
111
|
+
:white
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# Get the symbol for a log level
|
116
|
+
#
|
117
|
+
# @param level [Symbol] the log level
|
118
|
+
# @return [String] the symbol for the level
|
119
|
+
def get_level_symbol(level)
|
120
|
+
case level
|
121
|
+
when :debug
|
122
|
+
"•"
|
123
|
+
when :info
|
124
|
+
" " # "→"
|
125
|
+
when :warn
|
126
|
+
"!" # "⚠"
|
127
|
+
when :error
|
128
|
+
"✗"
|
129
|
+
when :fatal
|
130
|
+
"💀"
|
131
|
+
when :success
|
132
|
+
"✓"
|
133
|
+
else
|
134
|
+
"•"
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
@@ -1,65 +1,65 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "json"
|
4
|
-
require_relative "base"
|
5
|
-
|
6
|
-
module Makit
|
7
|
-
module Logging
|
8
|
-
module Formatters
|
9
|
-
# JSON formatter for structured logging
|
10
|
-
#
|
11
|
-
# Formats log requests as JSON objects with timestamp, level, message, and context.
|
12
|
-
# This is ideal for log aggregation systems and structured data analysis.
|
13
|
-
#
|
14
|
-
# @example
|
15
|
-
# formatter = JsonFormatter.new
|
16
|
-
# formatted = formatter.format(log_request)
|
17
|
-
# # => '{"timestamp":"2024-01-15T10:30:45Z","level":"INFO","message":"User logged in","context":{"user_id":123}}'
|
18
|
-
class JsonFormatter < Base
|
19
|
-
# @return [Hash] additional options for JSON formatting
|
20
|
-
attr_reader :options
|
21
|
-
|
22
|
-
# Initialize JSON formatter
|
23
|
-
#
|
24
|
-
# @param options [Hash] JSON generation options
|
25
|
-
def initialize(options: {})
|
26
|
-
@options = {
|
27
|
-
indent: nil,
|
28
|
-
space: nil,
|
29
|
-
space_before: nil,
|
30
|
-
object_nl: nil,
|
31
|
-
array_nl: nil,
|
32
|
-
allow_nan: false,
|
33
|
-
max_nesting: 100,
|
34
|
-
}.merge(options)
|
35
|
-
end
|
36
|
-
|
37
|
-
# Format log request as JSON
|
38
|
-
#
|
39
|
-
# @param log_request [LogRequest] the log request to format
|
40
|
-
# @return [String] JSON formatted log entry
|
41
|
-
def format(log_request)
|
42
|
-
log_data = {
|
43
|
-
timestamp: log_request.timestamp.iso8601,
|
44
|
-
level: log_request.level.to_s.upcase,
|
45
|
-
message: log_request.message,
|
46
|
-
}
|
47
|
-
|
48
|
-
# Add context if present
|
49
|
-
log_data[:context] = log_request.context unless log_request.context.empty?
|
50
|
-
|
51
|
-
JSON.generate(log_data, @options)
|
52
|
-
end
|
53
|
-
|
54
|
-
# Get formatter configuration
|
55
|
-
#
|
56
|
-
# @return [Hash] formatter configuration including JSON options
|
57
|
-
def config
|
58
|
-
super.merge(
|
59
|
-
json_options: @options,
|
60
|
-
)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
require_relative "base"
|
5
|
+
|
6
|
+
module Makit
|
7
|
+
module Logging
|
8
|
+
module Formatters
|
9
|
+
# JSON formatter for structured logging
|
10
|
+
#
|
11
|
+
# Formats log requests as JSON objects with timestamp, level, message, and context.
|
12
|
+
# This is ideal for log aggregation systems and structured data analysis.
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# formatter = JsonFormatter.new
|
16
|
+
# formatted = formatter.format(log_request)
|
17
|
+
# # => '{"timestamp":"2024-01-15T10:30:45Z","level":"INFO","message":"User logged in","context":{"user_id":123}}'
|
18
|
+
class JsonFormatter < Base
|
19
|
+
# @return [Hash] additional options for JSON formatting
|
20
|
+
attr_reader :options
|
21
|
+
|
22
|
+
# Initialize JSON formatter
|
23
|
+
#
|
24
|
+
# @param options [Hash] JSON generation options
|
25
|
+
def initialize(options: {})
|
26
|
+
@options = {
|
27
|
+
indent: nil,
|
28
|
+
space: nil,
|
29
|
+
space_before: nil,
|
30
|
+
object_nl: nil,
|
31
|
+
array_nl: nil,
|
32
|
+
allow_nan: false,
|
33
|
+
max_nesting: 100,
|
34
|
+
}.merge(options)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Format log request as JSON
|
38
|
+
#
|
39
|
+
# @param log_request [LogRequest] the log request to format
|
40
|
+
# @return [String] JSON formatted log entry
|
41
|
+
def format(log_request)
|
42
|
+
log_data = {
|
43
|
+
timestamp: log_request.timestamp.iso8601,
|
44
|
+
level: log_request.level.to_s.upcase,
|
45
|
+
message: log_request.message,
|
46
|
+
}
|
47
|
+
|
48
|
+
# Add context if present
|
49
|
+
log_data[:context] = log_request.context unless log_request.context.empty?
|
50
|
+
|
51
|
+
JSON.generate(log_data, @options)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Get formatter configuration
|
55
|
+
#
|
56
|
+
# @return [Hash] formatter configuration including JSON options
|
57
|
+
def config
|
58
|
+
super.merge(
|
59
|
+
json_options: @options,
|
60
|
+
)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|