Class: ProtonBot::Log
- Inherits:
-
Object
- Object
- ProtonBot::Log
- Defined in:
- lib/protonbot/log.rb
Overview
Log - for colored logging.
Instance Attribute Summary collapse
-
#levels ⇒ Hash<String>
Colorscheme.
-
#logging ⇒ Bool
If false, does not write messages.
Logging collapse
- #crash(msg, code = 1, nam = 'log') ⇒ Object
- #debug(msg, nam = 'log') ⇒ Object
- #error(msg, nam = 'log') ⇒ Object
- #info(msg, nam = 'log') ⇒ Object
- #warn(msg, nam = 'log') ⇒ Object
Instance Method Summary collapse
-
#initialize ⇒ Log
constructor
A new instance of Log.
-
#inspect ⇒ String
Output.
-
#stop ⇒ Object
Stops log thread.
-
#wrap(name) ⇒ LogWrapper
Use it to get rid of appending name on each log-method-call.
Constructor Details
#initialize ⇒ Log
Returns a new instance of Log.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 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 |
Instance Attribute Details
#levels ⇒ Hash<String>
Returns Colorscheme.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/protonbot/log.rb', line 6 class ProtonBot::Log attr_accessor :levels, :logging 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 # Use it to get rid of appending name on each log-method-call # @param name [String] # @return [LogWrapper] wrapper # @see ProtonBot::LogWrapper def wrap(name) ProtonBot::LogWrapper.new(self, name) end # @!group Logging # @param msg [String] # @param nam [String] Name def info(msg, nam = 'log') dat = gsub(msg.to_s, :info, nam) @queue << dat @pastel.strip(dat) end # @param msg [String] # @param nam [String] Name def debug(msg, nam = 'log') dat = gsub(msg.to_s, :debug, nam) @queue << dat @pastel.strip(dat) end # @param msg [String] # @param nam [String] Name def warn(msg, nam = 'log') dat = gsub(msg.to_s, :warning, nam) @queue << dat @pastel.strip(dat) end # @param msg [String] # @param nam [String] Name def error(msg, nam = 'log') dat = gsub(msg.to_s, :error, nam) @queue << dat @pastel.strip(dat) end # @param msg [String] # @param code [Integer] # @param nam [String] Name def crash(msg, code = 1, nam = 'log') dat = gsub(msg.to_s, :crash, nam) @queue << dat @pastel.strip(dat) exit code end # @!endgroup # @return [String] Output def inspect %(<#ProtonBot::Log:#{object_id.to_s(16)} @logging=#{@logging}>) end # Stops log thread def stop @stop = true @thr.join end private # Formats message # @param msg [String] # @param sname [Symbol] Color-Scheme name # @param nam [String] Log-Name 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 # Log-loop - reads messages from queue and writes them to STDOUT 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 # Default colorcheme DEFAULT_SCHEME = { info: { chars: 'I', fmt: { datetime: [:bright_cyan], name: [:cyan], lvl: [:cyan], arrows: [:bright_cyan] } }, debug: { chars: 'D', fmt: { datetime: [:bright_green], name: [:green], lvl: [:green], arrows: [:bright_green] } }, warning: { chars: 'W', fmt: { datetime: [:bright_yellow], name: [:yellow], lvl: [:yellow], arrows: [:bright_yellow] } }, error: { chars: 'E', fmt: { datetime: [:bright_red], name: [:red], lvl: [:red], arrows: [:bright_red] } }, crash: { chars: 'C', fmt: { datetime: [:bright_magenta], name: [:magenta], lvl: [:magenta], arrows: [:bright_magenta] } } }.freeze end |
#logging ⇒ Bool
Returns If false, does not write messages.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/protonbot/log.rb', line 6 class ProtonBot::Log attr_accessor :levels, :logging 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 # Use it to get rid of appending name on each log-method-call # @param name [String] # @return [LogWrapper] wrapper # @see ProtonBot::LogWrapper def wrap(name) ProtonBot::LogWrapper.new(self, name) end # @!group Logging # @param msg [String] # @param nam [String] Name def info(msg, nam = 'log') dat = gsub(msg.to_s, :info, nam) @queue << dat @pastel.strip(dat) end # @param msg [String] # @param nam [String] Name def debug(msg, nam = 'log') dat = gsub(msg.to_s, :debug, nam) @queue << dat @pastel.strip(dat) end # @param msg [String] # @param nam [String] Name def warn(msg, nam = 'log') dat = gsub(msg.to_s, :warning, nam) @queue << dat @pastel.strip(dat) end # @param msg [String] # @param nam [String] Name def error(msg, nam = 'log') dat = gsub(msg.to_s, :error, nam) @queue << dat @pastel.strip(dat) end # @param msg [String] # @param code [Integer] # @param nam [String] Name def crash(msg, code = 1, nam = 'log') dat = gsub(msg.to_s, :crash, nam) @queue << dat @pastel.strip(dat) exit code end # @!endgroup # @return [String] Output def inspect %(<#ProtonBot::Log:#{object_id.to_s(16)} @logging=#{@logging}>) end # Stops log thread def stop @stop = true @thr.join end private # Formats message # @param msg [String] # @param sname [Symbol] Color-Scheme name # @param nam [String] Log-Name 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 # Log-loop - reads messages from queue and writes them to STDOUT 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 # Default colorcheme DEFAULT_SCHEME = { info: { chars: 'I', fmt: { datetime: [:bright_cyan], name: [:cyan], lvl: [:cyan], arrows: [:bright_cyan] } }, debug: { chars: 'D', fmt: { datetime: [:bright_green], name: [:green], lvl: [:green], arrows: [:bright_green] } }, warning: { chars: 'W', fmt: { datetime: [:bright_yellow], name: [:yellow], lvl: [:yellow], arrows: [:bright_yellow] } }, error: { chars: 'E', fmt: { datetime: [:bright_red], name: [:red], lvl: [:red], arrows: [:bright_red] } }, crash: { chars: 'C', fmt: { datetime: [:bright_magenta], name: [:magenta], lvl: [:magenta], arrows: [:bright_magenta] } } }.freeze end |
Instance Method Details
#crash(msg, code = 1, nam = 'log') ⇒ Object
70 71 72 73 74 75 |
# 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') ⇒ Object
45 46 47 48 49 |
# 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') ⇒ Object
61 62 63 64 65 |
# 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') ⇒ Object
37 38 39 40 41 |
# 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 ⇒ String
Returns Output.
79 80 81 |
# File 'lib/protonbot/log.rb', line 79 def inspect %(<#ProtonBot::Log:#{object_id.to_s(16)} @logging=#{@logging}>) end |
#stop ⇒ Object
Stops log thread
84 85 86 87 |
# File 'lib/protonbot/log.rb', line 84 def stop @stop = true @thr.join end |
#warn(msg, nam = 'log') ⇒ Object
53 54 55 56 57 |
# 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) ⇒ LogWrapper
Use it to get rid of appending name on each log-method-call
30 31 32 |
# File 'lib/protonbot/log.rb', line 30 def wrap(name) ProtonBot::LogWrapper.new(self, name) end |