Class: Log4Ruby::PatternFormatter

Inherits:
Object
  • Object
show all
Defined in:
lib/log4ruby/formatters/pattern_formatter.rb

Instance Method Summary collapse

Constructor Details

#initialize(format_string, subst_array, parameter_formatters = {}) ⇒ PatternFormatter

New pattern formatter.

e.g. format_string = [%s] %7s - %s : %s subst_array = [:timestamp, :level, :full_logger_name, :message]

The above example will print the timestamp in the format specified. The level will be right aligned padded on the left to use 7 spaces followed by the full logger name and the message.

Parameters:

  • format_string (String)

    the pattern string to use when formatting log messages.

  • subst_array (Array)

    the log parameters to substitute into the format string.

  • parameter_formatters (Hash) (defaults to: {})

    custom formatters for log parameters. Maps parameter names to callable objects that will be invoked with the parameter’s value. The values returned will be used when substituting into the format string.



27
28
29
30
31
# File 'lib/log4ruby/formatters/pattern_formatter.rb', line 27

def initialize(format_string, subst_array, parameter_formatters = {})
  @format_string = format_string
  @subst_array = subst_array
  @parameter_formatters = parameter_formatters
end

Instance Method Details

#add_parameter_formatter(parameter, callable) ⇒ Object

Adds a parameter formatter to this formatter.

Parameters:

  • parameter (Symbol)

    the parameter to format.

  • callable (Proc)

    the callable to invoke.



37
38
39
# File 'lib/log4ruby/formatters/pattern_formatter.rb', line 37

def add_parameter_formatter(parameter, callable)
  @parameter_formatters[parameter] = callable
end

#format(log) ⇒ String

Format the log item using the pattern string.

Parameters:

Returns:

  • (String)

    the fully formatted log message.



46
47
48
49
50
51
52
53
54
# File 'lib/log4ruby/formatters/pattern_formatter.rb', line 46

def format(log)
  # Get the values of the parameters (apply custom formatters too).
  parameters = @subst_array.map do |parameter|
    value = log[parameter]
    @parameter_formatters.has_key?(parameter) ? @parameter_formatters[parameter].call(value) : value.to_s
  end
  # Substitute into the format string.
  @format_string % parameters
end