Class: Makit::Logging::Sinks::UnifiedFileSink

Inherits:
Base
  • Object
show all
Defined in:
lib/makit/logging/sinks/unified_file_sink.rb

Overview

Unified file sink with configurable multiple outputs

This sink replaces the need for multiple separate sinks by providing a single, highly configurable sink that can write to multiple files with different formats, filtering, and options. It supports console output, file logging, and structured logging through configuration.

Examples:

Basic usage with console and file output

sink = UnifiedFileSink.new(
  configurations: [
    { file: $stdout, format: :console },
    { file: "logs/app.log", format: :json }
  ]
)

Advanced configuration with filtering and formatting

sink = UnifiedFileSink.new(
  configurations: [
    {
      file: $stdout,
      format: :console,
      show_timestamp: true,
      show_level: true
    },
    {
      file: "logs/debug.log",
      format: :text,
      min_level: :debug,
      include_context: true
    },
    {
      file: "logs/audit.log",
      format: :json,
      min_level: :info,
      include_metadata: true
    }
  ]
)

Direct Known Subclasses

Console

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#applicable?, #name

Constructor Details

#initialize(configurations: []) ⇒ UnifiedFileSink

Initialize unified file sink

Parameters:

  • configurations (Array<Hash>) (defaults to: [])

    list of output configurations



55
56
57
58
59
60
61
62
63
# File 'lib/makit/logging/sinks/unified_file_sink.rb', line 55

def initialize(configurations: [])
  @configurations = validate_configurations(configurations)
  @formatters = {}
  @files = {}

  # Pre-initialize formatters and files
  initialize_formatters
  initialize_files
end

Instance Attribute Details

#configurationsArray<Hash> (readonly)

Returns list of output configurations.

Returns:

  • (Array<Hash>)

    list of output configurations



50
51
52
# File 'lib/makit/logging/sinks/unified_file_sink.rb', line 50

def configurations
  @configurations
end

Instance Method Details

#call(log_request) {|LogRequest| ... } ⇒ LogRequest

Execute sink logic to write log entry to configured outputs

Parameters:

  • log_request (LogRequest)

    the log request to process

Yields:

  • (LogRequest)

    yields the processed log request to the next sink

Yield Returns:

Returns:

  • (LogRequest)

    the final processed log request



71
72
73
74
75
# File 'lib/makit/logging/sinks/unified_file_sink.rb', line 71

def call(log_request, &block)
  write_to_outputs(log_request)
  block&.call(log_request) if block_given?
  log_request
end

#configHash

Get sink configuration

Returns:

  • (Hash)

    sink configuration



80
81
82
83
84
85
86
# File 'lib/makit/logging/sinks/unified_file_sink.rb', line 80

def config
  {
    name: self.class.name.split("::").last,
    configurations_count: @configurations.length,
    configurations: @configurations.map { |config| sanitize_config(config) },
  }
end