smart_message 0.0.16 → 0.0.17

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.
@@ -3,13 +3,13 @@
3
3
  #
4
4
  # STDOUT Transport Example - Publish Only
5
5
  #
6
- # This example demonstrates the STDOUT transport which is designed for
7
- # publish-only scenarios - great for debugging, logging, or one-way
8
- # message output without local processing.
6
+ # This example demonstrates the STDOUT transport with different formats
7
+ # using a single message class that can be configured with different
8
+ # transport instances.
9
9
 
10
10
  require_relative '../../lib/smart_message'
11
11
 
12
- puts "=== SmartMessage Example: STDOUT Transport (Publish Only) ==="
12
+ puts "=== SmartMessage Example: STDOUT Transport Format Demonstrations ==="
13
13
  puts
14
14
 
15
15
  # Configure SmartMessage for this example
@@ -18,128 +18,101 @@ SmartMessage.configure do |config|
18
18
  config.log_level = :warn # Reduce noise
19
19
  end
20
20
 
21
- # Define a Log Message for one-way output
22
- class LogMessage < SmartMessage::Base
23
- description "Log entries that are output to STDOUT for external processing"
24
-
25
- property :level,
26
- description: "Log level (info, warn, error, debug)"
27
- property :component,
28
- description: "Component or service generating the log"
29
- property :message,
30
- description: "Human-readable log message"
31
- property :timestamp,
32
- default: -> { Time.now.iso8601 },
33
- description: "ISO8601 timestamp of when log was generated"
34
- property :context,
35
- description: "Optional additional context data"
36
-
37
- # Configure to use STDOUT transport (publish-only)
21
+ # Define a simple message class for format demonstration
22
+ class DemoMessage < SmartMessage::Base
23
+ description "Simple demonstration message for format testing"
24
+
25
+ property :first_name,
26
+ description: "Person's first name"
27
+ property :last_name,
28
+ description: "Person's last name"
29
+
30
+ # Default config - will be overridden with transport instance replacement
38
31
  config do
39
32
  transport SmartMessage::Transport::StdoutTransport.new
40
- from 'log-service'
33
+ from 'demo-service'
41
34
  end
42
35
  end
43
36
 
44
- # Define a Metrics Message for monitoring systems
45
- class MetricsMessage < SmartMessage::Base
46
- description "System metrics published to STDOUT for monitoring ingestion"
47
-
48
- property :metric_name,
49
- description: "Name of the metric (e.g., 'cpu_usage', 'memory_usage')"
50
- property :value,
51
- description: "Numeric value of the metric"
52
- property :unit,
53
- description: "Unit of measurement (%, MB, requests/sec, etc.)"
54
- property :tags,
55
- description: "Hash of tags for metric categorization"
56
- property :timestamp,
57
- default: -> { Time.now.to_i },
58
- description: "Unix timestamp of metric collection"
37
+ puts "🎨 Example 1: Pretty Format (:pretty) - 1 message"
38
+ puts "=" * 60
59
39
 
60
- config do
61
- transport SmartMessage::Transport::StdoutTransport.new(format: :json) # JSON format for metrics
62
- from 'metrics-collector'
63
- end
64
- end
40
+ # Create a simple message for pretty formatting
41
+ message_data = {
42
+ first_name: "Alice",
43
+ last_name: "Johnson"
44
+ }
65
45
 
66
- puts "📝 Publishing log messages to STDOUT..."
67
- puts "=" * 50
46
+ # Replace the message's transport with :pretty format
47
+ message = DemoMessage.new(**message_data)
48
+ message.transport SmartMessage::Transport::StdoutTransport.new(format: :pretty)
49
+ message.publish
68
50
 
69
- # Create and publish various log messages
70
- log_messages = [
71
- {
72
- level: "info",
73
- component: "user-service",
74
- message: "User authentication successful",
75
- context: { user_id: 12345, ip_address: "192.168.1.100" }
76
- },
51
+ puts
52
+ puts
53
+ puts "📋 Example 2: JSONL Format (:jsonl) - 2 messages"
54
+ puts "=" * 60
55
+
56
+ # Create two simple messages for JSONL format
57
+ jsonl_messages = [
77
58
  {
78
- level: "warn",
79
- component: "payment-service",
80
- message: "Payment processing took longer than expected",
81
- context: { order_id: "ORD-001", processing_time_ms: 5500 }
59
+ first_name: "Bob",
60
+ last_name: "Smith"
82
61
  },
83
62
  {
84
- level: "error",
85
- component: "database-service",
86
- message: "Connection pool exhausted",
87
- context: { pool_size: 20, active_connections: 20, queue_length: 15 }
63
+ first_name: "Carol",
64
+ last_name: "Williams"
88
65
  }
89
66
  ]
90
67
 
91
- log_messages.each do |log_data|
92
- message = LogMessage.new(**log_data)
68
+ # Replace transport with :jsonl format and publish both messages
69
+ jsonl_messages.each do |msg_data|
70
+ message = DemoMessage.new(**msg_data)
71
+ message.transport SmartMessage::Transport::StdoutTransport.new(format: :jsonl)
93
72
  message.publish
94
- sleep(0.5) # Small delay for readability
95
73
  end
96
74
 
97
- puts "\n📊 Publishing metrics to STDOUT (JSON format)..."
98
- puts "=" * 50
75
+ puts
76
+ puts
77
+ puts "📊 Example 3: JSON Format (:json) - 3 messages"
78
+ puts "=" * 60
99
79
 
100
- # Create and publish system metrics
101
- metrics_data = [
80
+ # Create three simple messages for JSON format
81
+ json_messages = [
102
82
  {
103
- metric_name: "cpu_usage",
104
- value: 67.5,
105
- unit: "%",
106
- tags: { host: "web-01", environment: "production" }
83
+ first_name: "David",
84
+ last_name: "Brown"
107
85
  },
108
86
  {
109
- metric_name: "memory_usage",
110
- value: 2048,
111
- unit: "MB",
112
- tags: { host: "web-01", environment: "production" }
87
+ first_name: "Emma",
88
+ last_name: "Davis"
113
89
  },
114
90
  {
115
- metric_name: "requests_per_second",
116
- value: 125,
117
- unit: "req/sec",
118
- tags: { service: "api-gateway", endpoint: "/api/users" }
91
+ first_name: "Frank",
92
+ last_name: "Miller"
119
93
  }
120
94
  ]
121
95
 
122
- metrics_data.each do |metric_data|
123
- message = MetricsMessage.new(**metric_data)
96
+ # Replace transport with :json format and publish all three messages
97
+ json_messages.each do |msg_data|
98
+ message = DemoMessage.new(**msg_data)
99
+ message.transport SmartMessage::Transport::StdoutTransport.new(format: :json)
124
100
  message.publish
125
- sleep(0.3)
126
101
  end
127
102
 
128
- puts "\n" + "=" * 50
129
- puts "🔍 Key Points About STDOUT Transport:"
130
- puts " Publish-only: No message processing"
131
- puts " Perfect for logging and debugging scenarios"
132
- puts " Great for integration with external systems"
133
- puts " Supports both pretty-print and JSON formats"
134
- puts " ✓ Clean separation: output to STDOUT, logs to STDERR"
135
- puts " Subscription attempts are ignored with warnings"
136
-
137
- puts "\n💡 Usage Ideas:"
138
- puts " • Debug message flow: ./my_app | grep 'MessageClass'"
103
+ puts
104
+ puts
105
+ puts "\n🔍 Format Comparison Summary:"
106
+ puts " 🎨 :pretty - Beautiful, colorized output using amazing_print"
107
+ puts " 📋 :jsonl - JSON Lines format, one message per line (default)"
108
+ puts " 📊 :json - Compact JSON format without newlines"
109
+ puts
110
+ puts "💡 Usage Ideas:"
111
+ puts " • Debug message flow: ./my_app | grep 'first_name'"
139
112
  puts " • Feed log aggregators: ./my_app | fluentd"
140
- puts " • Pipe to analysis tools: ./my_app | jq '.metric_name'"
113
+ puts " • Pipe to analysis tools: ./my_app | jq '.last_name'"
141
114
  puts " • Integration testing: capture and verify output"
142
115
  puts " • Development monitoring: real-time message visibility"
143
-
144
- puts "\n⚠️ Note: If you need local message processing, use MemoryTransport instead!"
145
- puts "=" * 80
116
+ puts
117
+ puts "⚠️ Note: If you need local message processing, use MemoryTransport instead!"
118
+ puts "=" * 80
@@ -52,11 +52,13 @@ module SmartMessage
52
52
  flush_buffer if buffered_mode?
53
53
  if @file_mutex
54
54
  @file_mutex.synchronize do
55
- @file_handle&.close
55
+ @file_handle&.flush unless @file_handle&.closed?
56
+ @file_handle&.close unless @file_handle&.closed?
56
57
  @file_handle = nil
57
58
  end
58
59
  else
59
- @file_handle&.close
60
+ @file_handle&.flush unless @file_handle&.closed?
61
+ @file_handle&.close unless @file_handle&.closed?
60
62
  @file_handle = nil
61
63
  end
62
64
  end
@@ -64,22 +66,51 @@ module SmartMessage
64
66
  private
65
67
 
66
68
  def prepare_file_content(serialized_message)
67
- case @options[:file_format]
68
- when :lines
69
- "#{serialized_message}\n"
70
- when :raw
69
+ case @options[:format] || @options[:file_format] || :jsonl
70
+ when :json, :raw
71
71
  serialized_message
72
+ when :jsonl, :lines
73
+ "#{serialized_message}\n"
74
+ when :pretty
75
+ begin
76
+ require 'amazing_print'
77
+ # Use the serializer to decode back to the original data structure
78
+ if @serializer.respond_to?(:decode)
79
+ data = @serializer.decode(serialized_message)
80
+ data.ai + "\n"
81
+ else
82
+ # Fallback: try to parse as JSON
83
+ begin
84
+ require 'json'
85
+ data = JSON.parse(serialized_message)
86
+ data.ai + "\n"
87
+ rescue JSON::ParserError
88
+ # If not JSON, pretty print the raw string
89
+ serialized_message.ai + "\n"
90
+ end
91
+ end
92
+ rescue LoadError
93
+ # Fallback if amazing_print not available
94
+ "#{serialized_message}\n"
95
+ rescue => e
96
+ # Handle any other errors (like circuit breaker issues)
97
+ "#{serialized_message}\n"
98
+ end
72
99
  else
73
- "#{serialized_message}\n" # default to lines
100
+ "#{serialized_message}\n" # default to jsonl
74
101
  end
75
102
  end
76
103
 
77
104
  def open_file_handle
105
+ # Return IO objects directly, don't try to open them
106
+ return @options[:file_path] if @options[:file_path].respond_to?(:write)
107
+ # Open file handle for string paths
78
108
  File.open(current_file_path, file_mode, encoding: @options[:encoding])
79
109
  end
80
110
 
81
111
  def ensure_directory_exists
82
112
  return unless @options[:create_directories]
113
+ return if @options[:file_path].respond_to?(:write) # Skip for IO objects
83
114
 
84
115
  dir = File.dirname(current_file_path)
85
116
  FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
@@ -110,6 +141,7 @@ module SmartMessage
110
141
  end
111
142
 
112
143
  def direct_write(content)
144
+ return unless @file_handle
113
145
  @file_handle.write(content)
114
146
  @file_handle.flush if @options[:auto_flush]
115
147
  end
@@ -80,8 +80,11 @@ module SmartMessage
80
80
  end
81
81
  end
82
82
 
83
- def publish(payload)
84
- do_publish(nil, payload)
83
+ def publish(message)
84
+ # Extract message class and serialize the message
85
+ message_class = message._sm_header.message_class
86
+ serialized_message = encode_message(message)
87
+ do_publish(message_class, serialized_message)
85
88
  end
86
89
 
87
90
  def do_publish(message_class, serialized_message)
@@ -5,100 +5,12 @@
5
5
  require_relative 'file_transport'
6
6
 
7
7
  module SmartMessage
8
- module Transport
9
- # STDOUT transport for testing and development
10
- # This is a publish-only transport that outputs messages to STDOUT
11
- # Now inherits from FileTransport but maintains specialized formatting
12
- class StdoutTransport < FileTransport
13
- def initialize(options = {})
14
- # Merge STDOUT-specific defaults with FileTransport defaults
15
- stdout_options = {
16
- file_path: $stdout,
17
- file_mode: 'w',
18
- file_type: :regular,
19
- format: :pretty, # :pretty or :json
20
- enable_subscriptions: false, # STDOUT is publish-only
21
- auto_flush: true
22
- }
23
- super(stdout_options.merge(options))
24
- end
25
-
26
- # Default to JSON for readability in STDOUT
27
- def default_serializer
28
- SmartMessage::Serializer::Json.new
29
- end
30
-
31
- # Override configuration to handle STDOUT-specific setup
32
- def configure
33
- # If file_path is a string, delegate to parent FileTransport
34
- if @options[:file_path].is_a?(String)
35
- super
36
- else
37
- # Use the IO object directly (like $stdout)
38
- @file_handle = @options[:file_path]
39
- @write_buffer = []
40
- @last_flush = Time.now
41
- @file_mutex = Mutex.new
42
- end
43
- end
44
-
45
- # Override write_to_file to handle STDOUT directly
46
- def write_to_file(serialized_message)
47
- # If using a string file path, delegate to parent
48
- if @options[:file_path].is_a?(String)
49
- super
50
- else
51
- # Use IO object directly
52
- content = prepare_file_content(serialized_message)
53
- @file_handle.write(content)
54
- @file_handle.flush if @options[:auto_flush]
55
- end
56
- end
57
-
58
- # Override the file content preparation to use custom formatting
59
- def prepare_file_content(serialized_message)
60
- format_message(@current_message_class, serialized_message)
61
- end
62
-
63
- # Override subscribe methods to log warnings since this is a publish-only transport
64
- def subscribe(message_class, process_method, filter_options = {})
65
- logger.warn { "[SmartMessage::StdoutTransport] Subscription attempt ignored - STDOUT transport is publish-only (message_class: #{message_class}, process_method: #{process_method})" }
66
- end
67
-
68
- def unsubscribe(message_class, process_method)
69
- logger.warn { "[SmartMessage::StdoutTransport] Unsubscribe attempt ignored - STDOUT transport is publish-only (message_class: #{message_class}, process_method: #{process_method})" }
70
- end
71
-
72
- def unsubscribe!(message_class)
73
- logger.warn { "[SmartMessage::StdoutTransport] Unsubscribe all attempt ignored - STDOUT transport is publish-only (message_class: #{message_class})" }
74
- end
75
-
76
- private
77
-
78
- def format_message(message_class, serialized_message)
79
- if @options[:format] == :json
80
- # Output as JSON for machine parsing
81
- {
82
- transport: 'stdout',
83
- message_class: message_class,
84
- serialized_message: serialized_message,
85
- timestamp: Time.now.iso8601
86
- }.to_json + "\n"
87
- else
88
- # Pretty format for human reading
89
- <<~MESSAGE
90
-
91
- ===================================================
92
- == SmartMessage Published via STDOUT Transport
93
- == Message Class: #{message_class}
94
- == Serializer: #{@serializer.class.name}
95
- == Serialized Message:
96
- #{serialized_message}
97
- ===================================================
98
-
99
- MESSAGE
8
+ module Transport
9
+ class StdoutTransport < FileTransport
10
+ def initialize(options = {})
11
+ defaults = { file_path: $stdout, file_mode: 'w', file_type: :regular }
12
+ super(defaults.merge(options))
100
13
  end
101
14
  end
102
15
  end
103
16
  end
104
- end
@@ -3,5 +3,5 @@
3
3
  # frozen_string_literal: true
4
4
 
5
5
  module SmartMessage
6
- VERSION = '0.0.16'
6
+ VERSION = '0.0.17'
7
7
  end
data/mkdocs.yml CHANGED
@@ -169,13 +169,12 @@ nav:
169
169
  - 🚚 Transports:
170
170
  - Memory Transport: transports/memory-transport.md
171
171
  - Redis Transport: transports/redis-transport.md
172
- - Redis Enhanced Transport: transports/redis-enhanced-transport.md
173
- - Redis Queue Transport: transports/redis-queue-transport.md
172
+ - STDOUT Transport: transports/stdout-transport.md
173
+ - File Transport: transports/file-transport.md
174
+ - Multi-Transport Publishing: transports/multi-transport.md
174
175
  - Redis Transport Comparison: transports/redis-transport-comparison.md
175
176
  - 📚 Guides:
176
- - Redis Queue Getting Started: guides/redis-queue-getting-started.md
177
- - Redis Queue Patterns: guides/redis-queue-patterns.md
178
- - Redis Queue Production: guides/redis-queue-production.md
177
+ - Transport Selection: guides/transport-selection.md
179
178
  - ⚙️ Development:
180
179
  - Troubleshooting: development/troubleshooting.md
181
180
  - Ideas & Roadmap: development/ideas.md
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_message
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dewayne VanHoozer
@@ -311,6 +311,7 @@ files:
311
311
  - docs/development/troubleshooting.md
312
312
  - docs/getting-started/examples.md
313
313
  - docs/getting-started/quick-start.md
314
+ - docs/guides/transport-selection.md
314
315
  - docs/index.md
315
316
  - docs/reference/dead-letter-queue.md
316
317
  - docs/reference/logging.md
@@ -318,10 +319,12 @@ files:
318
319
  - docs/reference/proc-handlers.md
319
320
  - docs/reference/serializers.md
320
321
  - docs/reference/transports.md
322
+ - docs/transports/file-transport.md
321
323
  - docs/transports/memory-transport.md
322
324
  - docs/transports/multi-transport.md
323
325
  - docs/transports/redis-transport-comparison.md
324
326
  - docs/transports/redis-transport.md
327
+ - docs/transports/stdout-transport.md
325
328
  - examples/.gitignore
326
329
  - examples/README.md
327
330
  - examples/city_scenario/911_emergency_call_flow.svg
@@ -380,7 +383,6 @@ files:
380
383
  - examples/memory/15_logger_demo.rb
381
384
  - examples/memory/16_pretty_print_demo.rb
382
385
  - examples/memory/README.md
383
- - examples/memory/log/demo_app.log.1
384
386
  - examples/memory/log/demo_app.log.2
385
387
  - examples/memory/memory_transport_architecture.svg
386
388
  - examples/memory/point_to_point_pattern.svg
@@ -1,100 +0,0 @@
1
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 1 - generating content to trigger file rolling when size limit is reached [message:Log entry 1 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
2
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 1 [entry_number:1] [batch:demo] [message:Debug entry 1] [source:15_logger_demo.rb:93]
3
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 2 - generating content to trigger file rolling when size limit is reached [message:Log entry 2 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
4
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 2 [entry_number:2] [batch:demo] [message:Debug entry 2] [source:15_logger_demo.rb:93]
5
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 3 - generating content to trigger file rolling when size limit is reached [message:Log entry 3 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
6
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 3 [entry_number:3] [batch:demo] [message:Debug entry 3] [source:15_logger_demo.rb:93]
7
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 4 - generating content to trigger file rolling when size limit is reached [message:Log entry 4 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
8
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 4 [entry_number:4] [batch:demo] [message:Debug entry 4] [source:15_logger_demo.rb:93]
9
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 5 - generating content to trigger file rolling when size limit is reached [message:Log entry 5 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
10
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 5 [entry_number:5] [batch:demo] [message:Debug entry 5] [source:15_logger_demo.rb:93]
11
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 6 - generating content to trigger file rolling when size limit is reached [message:Log entry 6 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
12
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 6 [entry_number:6] [batch:demo] [message:Debug entry 6] [source:15_logger_demo.rb:93]
13
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 7 - generating content to trigger file rolling when size limit is reached [message:Log entry 7 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
14
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 7 [entry_number:7] [batch:demo] [message:Debug entry 7] [source:15_logger_demo.rb:93]
15
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 8 - generating content to trigger file rolling when size limit is reached [message:Log entry 8 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
16
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 8 [entry_number:8] [batch:demo] [message:Debug entry 8] [source:15_logger_demo.rb:93]
17
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 9 - generating content to trigger file rolling when size limit is reached [message:Log entry 9 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
18
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 9 [entry_number:9] [batch:demo] [message:Debug entry 9] [source:15_logger_demo.rb:93]
19
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 10 - generating content to trigger file rolling when size limit is reached [message:Log entry 10 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
20
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 10 [entry_number:10] [batch:demo] [message:Debug entry 10] [source:15_logger_demo.rb:93]
21
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 11 - generating content to trigger file rolling when size limit is reached [message:Log entry 11 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
22
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 11 [entry_number:11] [batch:demo] [message:Debug entry 11] [source:15_logger_demo.rb:93]
23
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 12 - generating content to trigger file rolling when size limit is reached [message:Log entry 12 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
24
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 12 [entry_number:12] [batch:demo] [message:Debug entry 12] [source:15_logger_demo.rb:93]
25
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 13 - generating content to trigger file rolling when size limit is reached [message:Log entry 13 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
26
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 13 [entry_number:13] [batch:demo] [message:Debug entry 13] [source:15_logger_demo.rb:93]
27
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 14 - generating content to trigger file rolling when size limit is reached [message:Log entry 14 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
28
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 14 [entry_number:14] [batch:demo] [message:Debug entry 14] [source:15_logger_demo.rb:93]
29
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 15 - generating content to trigger file rolling when size limit is reached [message:Log entry 15 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
30
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 15 [entry_number:15] [batch:demo] [message:Debug entry 15] [source:15_logger_demo.rb:93]
31
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 16 - generating content to trigger file rolling when size limit is reached [message:Log entry 16 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
32
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 16 [entry_number:16] [batch:demo] [message:Debug entry 16] [source:15_logger_demo.rb:93]
33
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 17 - generating content to trigger file rolling when size limit is reached [message:Log entry 17 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
34
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 17 [entry_number:17] [batch:demo] [message:Debug entry 17] [source:15_logger_demo.rb:93]
35
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 18 - generating content to trigger file rolling when size limit is reached [message:Log entry 18 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
36
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 18 [entry_number:18] [batch:demo] [message:Debug entry 18] [source:15_logger_demo.rb:93]
37
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 19 - generating content to trigger file rolling when size limit is reached [message:Log entry 19 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
38
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 19 [entry_number:19] [batch:demo] [message:Debug entry 19] [source:15_logger_demo.rb:93]
39
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 20 - generating content to trigger file rolling when size limit is reached [message:Log entry 20 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
40
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 20 [entry_number:20] [batch:demo] [message:Debug entry 20] [source:15_logger_demo.rb:93]
41
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 21 - generating content to trigger file rolling when size limit is reached [message:Log entry 21 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
42
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 21 [entry_number:21] [batch:demo] [message:Debug entry 21] [source:15_logger_demo.rb:93]
43
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 22 - generating content to trigger file rolling when size limit is reached [message:Log entry 22 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
44
- [2025-09-10T09:53:01.164 DEBUG (19258) #] Debug entry 22 [entry_number:22] [batch:demo] [message:Debug entry 22] [source:15_logger_demo.rb:93]
45
- [2025-09-10T09:53:01.164 INFO (19258) #] Log entry 23 - generating content to trigger file rolling when size limit is reached [message:Log entry 23 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
46
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 23 [entry_number:23] [batch:demo] [message:Debug entry 23] [source:15_logger_demo.rb:93]
47
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 24 - generating content to trigger file rolling when size limit is reached [message:Log entry 24 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
48
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 24 [entry_number:24] [batch:demo] [message:Debug entry 24] [source:15_logger_demo.rb:93]
49
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 25 - generating content to trigger file rolling when size limit is reached [message:Log entry 25 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
50
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 25 [entry_number:25] [batch:demo] [message:Debug entry 25] [source:15_logger_demo.rb:93]
51
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 26 - generating content to trigger file rolling when size limit is reached [message:Log entry 26 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
52
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 26 [entry_number:26] [batch:demo] [message:Debug entry 26] [source:15_logger_demo.rb:93]
53
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 27 - generating content to trigger file rolling when size limit is reached [message:Log entry 27 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
54
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 27 [entry_number:27] [batch:demo] [message:Debug entry 27] [source:15_logger_demo.rb:93]
55
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 28 - generating content to trigger file rolling when size limit is reached [message:Log entry 28 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
56
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 28 [entry_number:28] [batch:demo] [message:Debug entry 28] [source:15_logger_demo.rb:93]
57
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 29 - generating content to trigger file rolling when size limit is reached [message:Log entry 29 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
58
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 29 [entry_number:29] [batch:demo] [message:Debug entry 29] [source:15_logger_demo.rb:93]
59
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 30 - generating content to trigger file rolling when size limit is reached [message:Log entry 30 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
60
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 30 [entry_number:30] [batch:demo] [message:Debug entry 30] [source:15_logger_demo.rb:93]
61
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 31 - generating content to trigger file rolling when size limit is reached [message:Log entry 31 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
62
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 31 [entry_number:31] [batch:demo] [message:Debug entry 31] [source:15_logger_demo.rb:93]
63
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 32 - generating content to trigger file rolling when size limit is reached [message:Log entry 32 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
64
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 32 [entry_number:32] [batch:demo] [message:Debug entry 32] [source:15_logger_demo.rb:93]
65
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 33 - generating content to trigger file rolling when size limit is reached [message:Log entry 33 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
66
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 33 [entry_number:33] [batch:demo] [message:Debug entry 33] [source:15_logger_demo.rb:93]
67
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 34 - generating content to trigger file rolling when size limit is reached [message:Log entry 34 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
68
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 34 [entry_number:34] [batch:demo] [message:Debug entry 34] [source:15_logger_demo.rb:93]
69
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 35 - generating content to trigger file rolling when size limit is reached [message:Log entry 35 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
70
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 35 [entry_number:35] [batch:demo] [message:Debug entry 35] [source:15_logger_demo.rb:93]
71
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 36 - generating content to trigger file rolling when size limit is reached [message:Log entry 36 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
72
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 36 [entry_number:36] [batch:demo] [message:Debug entry 36] [source:15_logger_demo.rb:93]
73
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 37 - generating content to trigger file rolling when size limit is reached [message:Log entry 37 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
74
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 37 [entry_number:37] [batch:demo] [message:Debug entry 37] [source:15_logger_demo.rb:93]
75
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 38 - generating content to trigger file rolling when size limit is reached [message:Log entry 38 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
76
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 38 [entry_number:38] [batch:demo] [message:Debug entry 38] [source:15_logger_demo.rb:93]
77
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 39 - generating content to trigger file rolling when size limit is reached [message:Log entry 39 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
78
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 39 [entry_number:39] [batch:demo] [message:Debug entry 39] [source:15_logger_demo.rb:93]
79
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 40 - generating content to trigger file rolling when size limit is reached [message:Log entry 40 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
80
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 40 [entry_number:40] [batch:demo] [message:Debug entry 40] [source:15_logger_demo.rb:93]
81
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 41 - generating content to trigger file rolling when size limit is reached [message:Log entry 41 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
82
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 41 [entry_number:41] [batch:demo] [message:Debug entry 41] [source:15_logger_demo.rb:93]
83
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 42 - generating content to trigger file rolling when size limit is reached [message:Log entry 42 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
84
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 42 [entry_number:42] [batch:demo] [message:Debug entry 42] [source:15_logger_demo.rb:93]
85
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 43 - generating content to trigger file rolling when size limit is reached [message:Log entry 43 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
86
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 43 [entry_number:43] [batch:demo] [message:Debug entry 43] [source:15_logger_demo.rb:93]
87
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 44 - generating content to trigger file rolling when size limit is reached [message:Log entry 44 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
88
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 44 [entry_number:44] [batch:demo] [message:Debug entry 44] [source:15_logger_demo.rb:93]
89
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 45 - generating content to trigger file rolling when size limit is reached [message:Log entry 45 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
90
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 45 [entry_number:45] [batch:demo] [message:Debug entry 45] [source:15_logger_demo.rb:93]
91
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 46 - generating content to trigger file rolling when size limit is reached [message:Log entry 46 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
92
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 46 [entry_number:46] [batch:demo] [message:Debug entry 46] [source:15_logger_demo.rb:93]
93
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 47 - generating content to trigger file rolling when size limit is reached [message:Log entry 47 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
94
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 47 [entry_number:47] [batch:demo] [message:Debug entry 47] [source:15_logger_demo.rb:93]
95
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 48 - generating content to trigger file rolling when size limit is reached [message:Log entry 48 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
96
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 48 [entry_number:48] [batch:demo] [message:Debug entry 48] [source:15_logger_demo.rb:93]
97
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 49 - generating content to trigger file rolling when size limit is reached [message:Log entry 49 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
98
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 49 [entry_number:49] [batch:demo] [message:Debug entry 49] [source:15_logger_demo.rb:93]
99
- [2025-09-10T09:53:01.165 INFO (19258) #] Log entry 50 - generating content to trigger file rolling when size limit is reached [message:Log entry 50 - generating content to trigger file rolling when size limit is reached] [source:15_logger_demo.rb:92]
100
- [2025-09-10T09:53:01.165 DEBUG (19258) #] Debug entry 50 [entry_number:50] [batch:demo] [message:Debug entry 50] [source:15_logger_demo.rb:93]