class ProtonBot::Log
Log
- for colored logging. @!attribute [rw] levels
@return [Hash<String>] Colorscheme
@!attribute [rw] logging
@return [Bool] If false, does not write messages.
Constants
- DEFAULT_SCHEME
Default colorcheme
Attributes
levels[RW]
logging[RW]
Public Class Methods
new()
click to toggle source
# File lib/protonbot/log.rb, line 9 def initialize @pastel = Pastel.new @queue = Queue.new @fmt = '[:date|:time] :name ▷ :lvl ▶ :text' @dfmt = '%d.%m.%Y' @tfmt = '%H:%M:%S' @levels = DEFAULT_SCHEME @logging = true @stop = false lloop end
Public Instance Methods
crash(msg, code = 1, nam = 'log')
click to toggle source
@param msg [String] @param code [Integer] @param nam [String] Name
# File lib/protonbot/log.rb, line 70 def crash(msg, code = 1, nam = 'log') dat = gsub(msg.to_s, :crash, nam) @queue << dat @pastel.strip(dat) exit code end
debug(msg, nam = 'log')
click to toggle source
@param msg [String] @param nam [String] Name
# File lib/protonbot/log.rb, line 45 def debug(msg, nam = 'log') dat = gsub(msg.to_s, :debug, nam) @queue << dat @pastel.strip(dat) end
error(msg, nam = 'log')
click to toggle source
@param msg [String] @param nam [String] Name
# File lib/protonbot/log.rb, line 61 def error(msg, nam = 'log') dat = gsub(msg.to_s, :error, nam) @queue << dat @pastel.strip(dat) end
info(msg, nam = 'log')
click to toggle source
@!group Logging @param msg [String] @param nam [String] Name
# File lib/protonbot/log.rb, line 37 def info(msg, nam = 'log') dat = gsub(msg.to_s, :info, nam) @queue << dat @pastel.strip(dat) end
inspect()
click to toggle source
@return [String] Output
# File lib/protonbot/log.rb, line 79 def inspect %(<#ProtonBot::Log:#{object_id.to_s(16)} @logging=#{@logging}>) end
stop()
click to toggle source
Stops log thread
# File lib/protonbot/log.rb, line 84 def stop @stop = true @thr.join end
warn(msg, nam = 'log')
click to toggle source
@param msg [String] @param nam [String] Name
# File lib/protonbot/log.rb, line 53 def warn(msg, nam = 'log') dat = gsub(msg.to_s, :warning, nam) @queue << dat @pastel.strip(dat) end
wrap(name)
click to toggle source
Use it to get rid of appending name on each log-method-call @param name [String] @return [LogWrapper] wrapper @see ProtonBot::LogWrapper
# File lib/protonbot/log.rb, line 30 def wrap(name) ProtonBot::LogWrapper.new(self, name) end
Private Instance Methods
gsub(msg, sname, nam)
click to toggle source
Formats message @param msg [String] @param sname [Symbol] Color-Scheme name @param nam [String] Log-Name
# File lib/protonbot/log.rb, line 95 def gsub(msg, sname, nam) dt = DateTime.now date = dt.strftime(@dfmt) time = dt.strftime(@tfmt) dates = @pastel.decorate(date, *@levels[sname][:fmt][:datetime]) times = @pastel.decorate(time, *@levels[sname][:fmt][:datetime]) name = @pastel.decorate(nam, *@levels[sname][:fmt][:name]) lvl = @pastel.decorate(*@levels[sname][:chars], *@levels[sname][:fmt][:lvl]) @fmt .gsub(':date', dates) .gsub(':time', times) .gsub(':name', name) .gsub(':lvl', lvl) .gsub(':text', msg) .gsub('▷', @pastel.decorate('▷', *@levels[sname][:fmt][:arrows])) .gsub('▶', @pastel.decorate('▶', *@levels[sname][:fmt][:arrows])) end
lloop()
click to toggle source
Log-loop - reads messages from queue and writes them to STDOUT
# File lib/protonbot/log.rb, line 120 def lloop @thr = Thread.new do loop do break if @stop d = begin @queue.pop rescue nil end print("#{d}\n") if @logging && d end end end