Class: Rbcli::Logger

Inherits:
Object
  • Object
show all
Defined in:
lib/rbcli/components/logger/logger.rb

Overview

noinspection RubyClassVariableUsageInspection

Constant Summary collapse

@@formatters =
{
  display: Proc.new { |severity, _datetime, _progname, msg|
    severity == 'INFO' ? msg : "#{colorlevel(severity)}#{(' ' * (5 - severity.length))} || #{msg}"
  },
  simple: Proc.new { |severity, _datetime, progname, msg|
    @max_prog_len = (@max_prog_len > progname.length) ? @max_prog_len : progname.length unless progname.nil?
    "#{colorlevel(severity)}#{(' ' * (5 - severity.length))} || #{progname || (' ' * @max_prog_len)} || #{msg}"
  },
  full: Proc.new { |severity, datetime, progname, msg|
    @max_prog_len = (@max_prog_len > progname.length) ? @max_prog_len : progname.length unless progname.nil?
    "#{datetime.strftime("%Y-%m-%d %H:%M:%S.%6N")} || #{EXECUTABLE} || #{progname || (' ' * @max_prog_len)} || #{colorlevel(severity)}#{(' ' * (5 - severity.length))} || #{msg}"
  },
  apache: Proc.new { |severity, datetime, progname, msg|
    "[#{datetime.strftime("%a %b %d %H:%M:%S.%6N %Y")}] [#{severity}] [#{EXECUTABLE}] [#{progname}] #{msg.gsub(/\e\[([;\d]+)?m/, '')}"
  },
  json: Proc.new { |severity, datetime, progname, msg|
    { timestamp: datetime.strftime("%Y-%m-%d %H:%M:%S.%N"), severity: severity, application: EXECUTABLE, module: progname, message: msg.gsub(/\e\[([;\d]+)?m/, '') }.to_json
  },
  ruby: Proc.new { |severity, datetime, progname, msg|
    @original_formatter.call(severity, datetime, progname, msg).chomp
  },
  lolcat: Proc.new { |severity, _datetime, _progname, msg|
    "#{colorlevel(severity)}#{(' ' * (5 - severity.length))} || #{Lol.makestr(msg, { spread: 3, freq: 0.1, slope: 4, invert: false, truecolor: true })}"
  }
}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(target: STDOUT, level: :info, format: :display) ⇒ Logger

Returns a new instance of Logger.



44
45
46
47
48
# File 'lib/rbcli/components/logger/logger.rb', line 44

def initialize(target: STDOUT, level: :info, format: :display)
  self.target(target)
  self.level(level)
  self.format(format)
end

Class Method Details

.colorlevel(level) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
# File 'lib/rbcli/components/logger/logger.rb', line 103

def self.colorlevel level
  level.colorize(
    {
      'DEBUG' => :blue,
      'INFO' => :green,
      'WARN' => :yellow,
      'ERROR' => :red,
      'FATAL' => { color: :light_red, mode: :bold },
      'ANY' => :cyan
    }[level.to_s.upcase] || :default)
end

.formatsObject



40
41
42
# File 'lib/rbcli/components/logger/logger.rb', line 40

def self.formats
  @@formatters.keys
end

Instance Method Details

#add(level, message, progname = nil, &block) ⇒ Object



72
73
74
# File 'lib/rbcli/components/logger/logger.rb', line 72

def add level, message, progname = nil, &block
  @logger.add(logger_level(level), message, progname, &block)
end

#add_format(slug, prok) ⇒ Object



68
69
70
# File 'lib/rbcli/components/logger/logger.rb', line 68

def add_format slug, prok
  @@formatters[slug] = prok
end

#debug(message, progname = nil, &block) ⇒ Object



76
77
78
# File 'lib/rbcli/components/logger/logger.rb', line 76

def debug message, progname = nil, &block
  self.add(Logger::DEBUG, message, progname, &block)
end

#error(message, progname = nil, &block) ⇒ Object



88
89
90
# File 'lib/rbcli/components/logger/logger.rb', line 88

def error message, progname = nil, &block
  self.add(Logger::ERROR, message, progname, &block)
end

#fatal(message, progname = nil, exit_status: nil, &block) ⇒ Object



92
93
94
95
# File 'lib/rbcli/components/logger/logger.rb', line 92

def fatal message, progname = nil, exit_status: nil, &block
  self.add(Logger::FATAL, message, progname, &block)
  Rbcli.exit(exit_status) unless exit_status.nil?
end

#format(slug = nil) ⇒ Object



63
64
65
66
# File 'lib/rbcli/components/logger/logger.rb', line 63

def format slug = nil
  return @format if slug.nil?
  @format = slug if @@formatters.key?(slug)
end

#info(message, progname = nil, &block) ⇒ Object



80
81
82
# File 'lib/rbcli/components/logger/logger.rb', line 80

def info message, progname = nil, &block
  self.add(Logger::INFO, message, progname, &block)
end

#level(slug = nil) ⇒ Object



58
59
60
61
# File 'lib/rbcli/components/logger/logger.rb', line 58

def level slug = nil
  return @logger.level if slug.nil?
  @logger.level = logger_level(slug)
end

#target(target) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/rbcli/components/logger/logger.rb', line 50

def target target
  @logger = Logger.new(target_select(target))
  @logger.formatter = Proc.new { |severity, datetime, progname, msg|
    msg = msg.to_s unless msg.is_a?(String)
    msg.lines.map { |line| @@formatters[@format].call(severity, datetime, progname, line.chomp) }.join("\n") + "\n"
  }
end

#unknown(message, progname = nil, &block) ⇒ Object



97
98
99
# File 'lib/rbcli/components/logger/logger.rb', line 97

def unknown message, progname = nil, &block
  self.add(Logger::UNKNOWN, message, progname, &block)
end

#warn(message, progname = nil, &block) ⇒ Object



84
85
86
# File 'lib/rbcli/components/logger/logger.rb', line 84

def warn message, progname = nil, &block
  self.add(Logger::WARN, message, progname, &block)
end