makit 0.0.112 → 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/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 +90 -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,71 +1,71 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "base"
|
4
|
-
|
5
|
-
module Makit
|
6
|
-
module Logging
|
7
|
-
module Formatters
|
8
|
-
# Plain text formatter with just the message
|
9
|
-
#
|
10
|
-
# Formats log requests as plain text containing only the message content.
|
11
|
-
# This is useful for simple log files where only the message matters.
|
12
|
-
#
|
13
|
-
# @example
|
14
|
-
# formatter = PlainTextFormatter.new
|
15
|
-
# formatted = formatter.format(log_request)
|
16
|
-
# # => 'User logged in'
|
17
|
-
class PlainTextFormatter < Base
|
18
|
-
# @return [Boolean] whether to include context in output
|
19
|
-
attr_reader :include_context
|
20
|
-
|
21
|
-
# Initialize plain text formatter
|
22
|
-
#
|
23
|
-
# @param include_context [Boolean] whether to include context in output
|
24
|
-
def initialize(include_context: false)
|
25
|
-
@include_context = include_context
|
26
|
-
end
|
27
|
-
|
28
|
-
# Format log request as plain text
|
29
|
-
#
|
30
|
-
# @param log_request [LogRequest] the log request to format
|
31
|
-
# @return [String] plain text formatted log entry
|
32
|
-
def format(log_request)
|
33
|
-
message = log_request.message
|
34
|
-
|
35
|
-
# Add context if enabled and present
|
36
|
-
if @include_context && !log_request.context.empty?
|
37
|
-
# Create a more readable context representation
|
38
|
-
context_parts = log_request.context.map do |k, v|
|
39
|
-
# Format values nicely based on their type
|
40
|
-
formatted_value = case v
|
41
|
-
when String
|
42
|
-
v.include?(" ") ? "\"#{v}\"" : v
|
43
|
-
when Hash, Array
|
44
|
-
v.inspect
|
45
|
-
when Time
|
46
|
-
v.strftime("%Y-%m-%d %H:%M:%S")
|
47
|
-
else
|
48
|
-
v.to_s
|
49
|
-
end
|
50
|
-
"#{k}: #{formatted_value}"
|
51
|
-
end
|
52
|
-
|
53
|
-
context_str = context_parts.join(", ")
|
54
|
-
message += " (#{context_str})"
|
55
|
-
end
|
56
|
-
|
57
|
-
message
|
58
|
-
end
|
59
|
-
|
60
|
-
# Get formatter configuration
|
61
|
-
#
|
62
|
-
# @return [Hash] formatter configuration
|
63
|
-
def config
|
64
|
-
super.merge(
|
65
|
-
include_context: @include_context,
|
66
|
-
)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Makit
|
6
|
+
module Logging
|
7
|
+
module Formatters
|
8
|
+
# Plain text formatter with just the message
|
9
|
+
#
|
10
|
+
# Formats log requests as plain text containing only the message content.
|
11
|
+
# This is useful for simple log files where only the message matters.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# formatter = PlainTextFormatter.new
|
15
|
+
# formatted = formatter.format(log_request)
|
16
|
+
# # => 'User logged in'
|
17
|
+
class PlainTextFormatter < Base
|
18
|
+
# @return [Boolean] whether to include context in output
|
19
|
+
attr_reader :include_context
|
20
|
+
|
21
|
+
# Initialize plain text formatter
|
22
|
+
#
|
23
|
+
# @param include_context [Boolean] whether to include context in output
|
24
|
+
def initialize(include_context: false)
|
25
|
+
@include_context = include_context
|
26
|
+
end
|
27
|
+
|
28
|
+
# Format log request as plain text
|
29
|
+
#
|
30
|
+
# @param log_request [LogRequest] the log request to format
|
31
|
+
# @return [String] plain text formatted log entry
|
32
|
+
def format(log_request)
|
33
|
+
message = log_request.message
|
34
|
+
|
35
|
+
# Add context if enabled and present
|
36
|
+
if @include_context && !log_request.context.empty?
|
37
|
+
# Create a more readable context representation
|
38
|
+
context_parts = log_request.context.map do |k, v|
|
39
|
+
# Format values nicely based on their type
|
40
|
+
formatted_value = case v
|
41
|
+
when String
|
42
|
+
v.include?(" ") ? "\"#{v}\"" : v
|
43
|
+
when Hash, Array
|
44
|
+
v.inspect
|
45
|
+
when Time
|
46
|
+
v.strftime("%Y-%m-%d %H:%M:%S")
|
47
|
+
else
|
48
|
+
v.to_s
|
49
|
+
end
|
50
|
+
"#{k}: #{formatted_value}"
|
51
|
+
end
|
52
|
+
|
53
|
+
context_str = context_parts.join(", ")
|
54
|
+
message += " (#{context_str})"
|
55
|
+
end
|
56
|
+
|
57
|
+
message
|
58
|
+
end
|
59
|
+
|
60
|
+
# Get formatter configuration
|
61
|
+
#
|
62
|
+
# @return [Hash] formatter configuration
|
63
|
+
def config
|
64
|
+
super.merge(
|
65
|
+
include_context: @include_context,
|
66
|
+
)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -1,64 +1,64 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "base"
|
4
|
-
|
5
|
-
module Makit
|
6
|
-
module Logging
|
7
|
-
module Formatters
|
8
|
-
# Text formatter with timestamp and log level
|
9
|
-
#
|
10
|
-
# Formats log requests as human-readable text with timestamp, log level,
|
11
|
-
# and message. This is the most common format for traditional log files.
|
12
|
-
#
|
13
|
-
# @example
|
14
|
-
# formatter = TextFormatter.new
|
15
|
-
# formatted = formatter.format(log_request)
|
16
|
-
# # => '[2024-01-15 10:30:45] INFO User logged in'
|
17
|
-
class TextFormatter < Base
|
18
|
-
# @return [String] timestamp format string
|
19
|
-
attr_reader :timestamp_format
|
20
|
-
# @return [Boolean] whether to include context in output
|
21
|
-
attr_reader :include_context
|
22
|
-
|
23
|
-
# Initialize text formatter
|
24
|
-
#
|
25
|
-
# @param timestamp_format [String] strftime format for timestamps
|
26
|
-
# @param include_context [Boolean] whether to include context in output
|
27
|
-
def initialize(timestamp_format: "%Y-%m-%d %H:%M:%S", include_context: false)
|
28
|
-
@timestamp_format = timestamp_format
|
29
|
-
@include_context = include_context
|
30
|
-
end
|
31
|
-
|
32
|
-
# Format log request as text
|
33
|
-
#
|
34
|
-
# @param log_request [LogRequest] the log request to format
|
35
|
-
# @return [String] text formatted log entry
|
36
|
-
def format(log_request)
|
37
|
-
timestamp = log_request.timestamp.strftime(@timestamp_format)
|
38
|
-
level = log_request.level.to_s.upcase
|
39
|
-
message = log_request.message
|
40
|
-
|
41
|
-
formatted = "[#{timestamp}] #{level} #{message}"
|
42
|
-
|
43
|
-
# Add context if enabled and present
|
44
|
-
if @include_context && !log_request.context.empty?
|
45
|
-
context_str = log_request.context.map { |k, v| "#{k}=#{v}" }.join(" ")
|
46
|
-
formatted += " #{context_str}"
|
47
|
-
end
|
48
|
-
|
49
|
-
formatted
|
50
|
-
end
|
51
|
-
|
52
|
-
# Get formatter configuration
|
53
|
-
#
|
54
|
-
# @return [Hash] formatter configuration
|
55
|
-
def config
|
56
|
-
super.merge(
|
57
|
-
timestamp_format: @timestamp_format,
|
58
|
-
include_context: @include_context,
|
59
|
-
)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Makit
|
6
|
+
module Logging
|
7
|
+
module Formatters
|
8
|
+
# Text formatter with timestamp and log level
|
9
|
+
#
|
10
|
+
# Formats log requests as human-readable text with timestamp, log level,
|
11
|
+
# and message. This is the most common format for traditional log files.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# formatter = TextFormatter.new
|
15
|
+
# formatted = formatter.format(log_request)
|
16
|
+
# # => '[2024-01-15 10:30:45] INFO User logged in'
|
17
|
+
class TextFormatter < Base
|
18
|
+
# @return [String] timestamp format string
|
19
|
+
attr_reader :timestamp_format
|
20
|
+
# @return [Boolean] whether to include context in output
|
21
|
+
attr_reader :include_context
|
22
|
+
|
23
|
+
# Initialize text formatter
|
24
|
+
#
|
25
|
+
# @param timestamp_format [String] strftime format for timestamps
|
26
|
+
# @param include_context [Boolean] whether to include context in output
|
27
|
+
def initialize(timestamp_format: "%Y-%m-%d %H:%M:%S", include_context: false)
|
28
|
+
@timestamp_format = timestamp_format
|
29
|
+
@include_context = include_context
|
30
|
+
end
|
31
|
+
|
32
|
+
# Format log request as text
|
33
|
+
#
|
34
|
+
# @param log_request [LogRequest] the log request to format
|
35
|
+
# @return [String] text formatted log entry
|
36
|
+
def format(log_request)
|
37
|
+
timestamp = log_request.timestamp.strftime(@timestamp_format)
|
38
|
+
level = log_request.level.to_s.upcase
|
39
|
+
message = log_request.message
|
40
|
+
|
41
|
+
formatted = "[#{timestamp}] #{level} #{message}"
|
42
|
+
|
43
|
+
# Add context if enabled and present
|
44
|
+
if @include_context && !log_request.context.empty?
|
45
|
+
context_str = log_request.context.map { |k, v| "#{k}=#{v}" }.join(" ")
|
46
|
+
formatted += " #{context_str}"
|
47
|
+
end
|
48
|
+
|
49
|
+
formatted
|
50
|
+
end
|
51
|
+
|
52
|
+
# Get formatter configuration
|
53
|
+
#
|
54
|
+
# @return [Hash] formatter configuration
|
55
|
+
def config
|
56
|
+
super.merge(
|
57
|
+
timestamp_format: @timestamp_format,
|
58
|
+
include_context: @include_context,
|
59
|
+
)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -1,115 +1,119 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Makit
|
4
|
-
module Logging
|
5
|
-
# Represents a log request that flows through the logging middleware chain
|
6
|
-
#
|
7
|
-
# This class encapsulates all the information needed for a log entry,
|
8
|
-
# including the log level, message, context, and metadata. It provides
|
9
|
-
# a clean interface for middleware to process and modify log information.
|
10
|
-
#
|
11
|
-
# @example Basic usage
|
12
|
-
# request = LogRequest.new(:info, "Processing started")
|
13
|
-
# request.add_metadata(process_id: 12345)
|
14
|
-
# puts request.to_h
|
15
|
-
#
|
16
|
-
# @example With context
|
17
|
-
# request = LogRequest.new(:error, "Build failed", {
|
18
|
-
# repository: "user/repo",
|
19
|
-
# commit: "abc123"
|
20
|
-
# })
|
21
|
-
class LogRequest
|
22
|
-
# @return [Symbol] the log level (:debug, :info, :warn, :error, :fatal, :success)
|
23
|
-
attr_reader :level
|
24
|
-
|
25
|
-
# @return [String] the log message
|
26
|
-
attr_reader :message
|
27
|
-
|
28
|
-
# @return [Hash] additional context information
|
29
|
-
attr_reader :context
|
30
|
-
|
31
|
-
# @return [Hash] metadata about the log entry
|
32
|
-
attr_reader :metadata
|
33
|
-
|
34
|
-
# @return [Time] when the log request was created
|
35
|
-
attr_reader :timestamp
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
#
|
40
|
-
#
|
41
|
-
# @param
|
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
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Makit
|
4
|
+
module Logging
|
5
|
+
# Represents a log request that flows through the logging middleware chain
|
6
|
+
#
|
7
|
+
# This class encapsulates all the information needed for a log entry,
|
8
|
+
# including the log level, message, context, and metadata. It provides
|
9
|
+
# a clean interface for middleware to process and modify log information.
|
10
|
+
#
|
11
|
+
# @example Basic usage
|
12
|
+
# request = LogRequest.new(:info, "Processing started")
|
13
|
+
# request.add_metadata(process_id: 12345)
|
14
|
+
# puts request.to_h
|
15
|
+
#
|
16
|
+
# @example With context
|
17
|
+
# request = LogRequest.new(:error, "Build failed", {
|
18
|
+
# repository: "user/repo",
|
19
|
+
# commit: "abc123"
|
20
|
+
# })
|
21
|
+
class LogRequest
|
22
|
+
# @return [Symbol] the log level (:debug, :info, :warn, :error, :fatal, :success)
|
23
|
+
attr_reader :level
|
24
|
+
|
25
|
+
# @return [String] the log message
|
26
|
+
attr_reader :message
|
27
|
+
|
28
|
+
# @return [Hash] additional context information
|
29
|
+
attr_reader :context
|
30
|
+
|
31
|
+
# @return [Hash] metadata about the log entry
|
32
|
+
attr_reader :metadata
|
33
|
+
|
34
|
+
# @return [Time] when the log request was created
|
35
|
+
attr_reader :timestamp
|
36
|
+
# @return [Symbol] the verbosity level (:quiet, :normal, :verbose, :debug)
|
37
|
+
attr_reader :verbosity
|
38
|
+
|
39
|
+
# Initialize a new log request
|
40
|
+
#
|
41
|
+
# @param level [Symbol] the log level
|
42
|
+
# @param message [String] the log message
|
43
|
+
# @param context [Hash] additional context information
|
44
|
+
# @param verbosity [Symbol] the verbosity level (:quiet, :normal, :verbose, :debug)
|
45
|
+
def initialize(level, message, context = {}, verbosity: :normal)
|
46
|
+
@level = level
|
47
|
+
@message = message
|
48
|
+
@context = context.dup
|
49
|
+
@metadata = {}
|
50
|
+
@timestamp = Time.now
|
51
|
+
@verbosity = verbosity
|
52
|
+
end
|
53
|
+
|
54
|
+
# Add metadata to the log request
|
55
|
+
#
|
56
|
+
# @param data [Hash] metadata to add
|
57
|
+
# @return [void]
|
58
|
+
def add_metadata(data)
|
59
|
+
@metadata.merge!(data)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Convert the log request to a hash representation
|
63
|
+
#
|
64
|
+
# @return [Hash] hash representation of the log request
|
65
|
+
def to_h
|
66
|
+
{
|
67
|
+
level: @level,
|
68
|
+
message: @message,
|
69
|
+
context: @context,
|
70
|
+
metadata: @metadata,
|
71
|
+
timestamp: @timestamp.iso8601,
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
# Convert the log request to a JSON string
|
76
|
+
#
|
77
|
+
# @return [String] JSON representation of the log request
|
78
|
+
def to_json(*_args)
|
79
|
+
require "json"
|
80
|
+
JSON.generate(to_h)
|
81
|
+
end
|
82
|
+
|
83
|
+
# Get a formatted string representation
|
84
|
+
#
|
85
|
+
# @return [String] formatted string representation
|
86
|
+
def to_s
|
87
|
+
"[#{@timestamp.strftime("%Y-%m-%d %H:%M:%S")}] #{@level.to_s.upcase}: #{@message}"
|
88
|
+
end
|
89
|
+
|
90
|
+
# Check if this is an error level log
|
91
|
+
#
|
92
|
+
# @return [Boolean] true if error level
|
93
|
+
def error?
|
94
|
+
@level == :error || @level == :fatal
|
95
|
+
end
|
96
|
+
|
97
|
+
# Check if this is a success level log
|
98
|
+
#
|
99
|
+
# @return [Boolean] true if success level
|
100
|
+
def success?
|
101
|
+
@level == :success
|
102
|
+
end
|
103
|
+
|
104
|
+
# Check if this is an info level log
|
105
|
+
#
|
106
|
+
# @return [Boolean] true if info level
|
107
|
+
def info?
|
108
|
+
@level == :info
|
109
|
+
end
|
110
|
+
|
111
|
+
# Check if this is a warning level log
|
112
|
+
#
|
113
|
+
# @return [Boolean] true if warn level
|
114
|
+
def warn?
|
115
|
+
@level == :warn
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|