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
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
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