class Logz::MultiLogger

Attributes

folder[RW]
loggers[RW]

Public Class Methods

new(folder = Logz.config.folder, loggers: []) click to toggle source
# File lib/logz/multi_logger.rb, line 6
def initialize(folder = Logz.config.folder, loggers: [])
  @loggers = {}
  @folder = set_and_create_folder(folder)
  Logz.config.loggers.dup.push(*loggers).each { |name| add(name) }
end

Public Instance Methods

<<(name, path = "", to_stdout: nil, to_file: nil) click to toggle source
# File lib/logz/multi_logger.rb, line 23
def <<(name, path = "", to_stdout: nil, to_file: nil)
  add(name, path, to_stdout: to_stdout, to_file: to_file)
end
[](name) click to toggle source
# File lib/logz/multi_logger.rb, line 40
def [](name)
  loggers[name.to_sym]
end
add(name, path = "", to_stdout: Logz.config.output_to_stdout, to_file: Logz.config.output_to_file) click to toggle source
# File lib/logz/multi_logger.rb, line 12
def add(name, path = "", to_stdout: Logz.config.output_to_stdout, to_file: Logz.config.output_to_file)
  if name.is_a?(Array)
    name.each { |log| add(log, path, to_stdout: to_stdout, to_file: to_file) }
  elsif name == STDOUT || name.to_s == "stdout"
    @loggers[:stdout] = LoggerWrapper.new(STDOUT)
  else
    output_stream = set_output_stream(name, path, to_stdout, to_file)
    @loggers[name.to_sym] = LoggerWrapper.new(output_stream)
  end
end
default_logger() click to toggle source
# File lib/logz/multi_logger.rb, line 54
def default_logger
  loggers[:stdout]
end
delete(name)
Alias for: remove
each() { |logger| ... } click to toggle source
# File lib/logz/multi_logger.rb, line 34
def each
  loggers.each do |name, logger|
    yield(logger)
  end
end
global_level() click to toggle source
# File lib/logz/multi_logger.rb, line 48
def global_level
  default_logger.level
end
Also aliased as: level
global_level=(level) click to toggle source
# File lib/logz/multi_logger.rb, line 44
def global_level=(level)
  loggers.each { |name, logger| logger.level = level }
end
level()
Alias for: global_level
method_missing(m, *args, &block) click to toggle source
# File lib/logz/multi_logger.rb, line 58
def method_missing(m, *args, &block)
  if loggers.has_key?(m)
    if args.empty?
      loggers[m]
    else
      puts "Invalid method for logger '#{m}': #{args.join(", ")}"
    end
  elsif default_logger.has_level?(m)
    default_logger.logger.send(m, *args, &block)
  elsif default_logger.respond_to?(m)
    default_logger.send(m, *args, &block)
  else
    puts "Logger '#{m}' not found. Current loggers: #{loggers.keys.join(", ")}"
  end
end
remove(name) click to toggle source
# File lib/logz/multi_logger.rb, line 27
def remove(name)
  @loggers[name.to_sym].close
  @loggers.delete(name.to_sym)
end
Also aliased as: delete

Private Instance Methods

set_and_create_folder(folder) click to toggle source
# File lib/logz/multi_logger.rb, line 76
def set_and_create_folder(folder)
  set_folder(folder).tap do |f|
    FileUtils.mkdir_p(f) unless File.directory?(f)
  end
end
set_folder(folder) click to toggle source
# File lib/logz/multi_logger.rb, line 82
def set_folder(folder)
  if !folder || folder.empty? || folder == "." || folder == "./"
    Dir.pwd
  elsif folder.start_with?("/")
    folder
  else
    File.join(Dir.pwd, folder)
  end
end
set_log_path(name, path) click to toggle source
# File lib/logz/multi_logger.rb, line 105
def set_log_path(name, path)
  file_extension = Logz.config.extension.to_s.strip.empty? ? "" : ".#{Logz.config.extension}"
  log_folder_path = path.start_with?("/") ? path : File.join(folder, path)
  log_file_path = "/#{Logz.config.prefix}#{name}#{Logz.config.suffix}#{file_extension}"

  File.join(log_folder_path, log_file_path)
end
set_output_stream(name, path, to_stdout, to_file) click to toggle source
# File lib/logz/multi_logger.rb, line 92
def set_output_stream(name, path, to_stdout, to_file)
  if to_file
    log_path = set_log_path(name, path)
    log_file = File.open(log_path, "a+")

    to_stdout ? MultiIO.new(STDOUT, log_file) : log_file
  elsif to_stdout
    STDOUT
  else
    "/dev/null"
  end
end