class TTY::Logger::Handlers::Stream

Attributes

config[R]
level[R]
output[R]

Public Class Methods

new(output: $stderr, formatter: nil, config: nil, level: nil) click to toggle source
# File lib/tty/logger/handlers/stream.rb, line 17
def initialize(output: $stderr, formatter: nil, config: nil, level: nil)
  @output = Array[output].flatten
  @formatter = coerce_formatter(formatter || config.formatter).new
  @config = config
  @level = level || @config.level
  @mutex = Mutex.new
end

Public Instance Methods

call(event) click to toggle source

@api public

# File lib/tty/logger/handlers/stream.rb, line 26
def call(event)
  @mutex.lock

  data = {}
  metadata.each do |meta|
    case meta
    when :date
      data["date"] = event.metadata[:time].strftime(config.date_format)
    when :time
      data["time"] = event.metadata[:time].strftime(config.time_format)
    when :file
      data["path"] = format_filepath(event)
    when :pid
      data["pid"] = event.metadata[:pid]
    else
      raise "Unknown metadata `#{meta}`"
    end
  end
  data["level"] = event.metadata[:level]
  data["message"] = event.message.join(' ')
  unless event.fields.empty?
    data.merge!(event.fields)
  end
  unless event.backtrace.empty?
    data.merge!("backtrace" => event.backtrace.join(","))
  end

  output.each do |out|
    out.puts @formatter.dump(data, max_bytes: config.max_bytes,
                             max_depth: config.max_depth)
  end
ensure
  @mutex.unlock
end