extended-logger 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/extended_logger.rb +6 -0
- data/lib/extended_logger/colored_formatter.rb +51 -0
- data/lib/extended_logger/extended_logger.rb +77 -0
- data/lib/extended_logger/factory.rb +43 -0
- data/lib/extended_logger/formatter.rb +39 -0
- metadata +53 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9b144a61490df22da5ade97aedb3fae7786c1c93
|
4
|
+
data.tar.gz: 3d0c3919b223b08aecc6630115d2f6c8ff86eb09
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6ee0bbd9019da7244ee7a00638db0d10605a23bc3f06a22215baabcf78699f6ab0fb97e94694e31390a133692a51fe36cd7fbe340ee5b8930c703fd8c7bb9595
|
7
|
+
data.tar.gz: 10ca841e6bdcbe41f83ef74ad847c36d1ea42646ac794793f91cb9b01c7c5ba963fbc25b4fa6bc558c948025fb823ce9939c7da955aabf25edeae8be9029572d
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class ExtendedLogger
|
2
|
+
class ColoredFormatter < Formatter
|
3
|
+
ANSI_COLORS = %i(black red green yellow blue magenta cyan white)
|
4
|
+
|
5
|
+
attr_writer :palette
|
6
|
+
|
7
|
+
def bg *args
|
8
|
+
col :bg, *args
|
9
|
+
end
|
10
|
+
|
11
|
+
def call *arguments
|
12
|
+
log_entry = delegate *arguments
|
13
|
+
|
14
|
+
severity = arguments.fetch 0
|
15
|
+
colorizer = palette.fetch severity do
|
16
|
+
-> message { message }
|
17
|
+
end
|
18
|
+
|
19
|
+
instance_exec log_entry, &colorizer
|
20
|
+
end
|
21
|
+
|
22
|
+
def col fgbg, color_code, intensity_code, str
|
23
|
+
color_num = ANSI_COLORS.index color_code
|
24
|
+
intensity_num = { :normal => 0, :bright => 1 }.fetch intensity_code
|
25
|
+
fgbg_num = { :fg => 3, :bg => 4 }.fetch fgbg
|
26
|
+
"\e[#{intensity_num};#{fgbg_num}#{color_num}m#{str}\e[0m"
|
27
|
+
end
|
28
|
+
|
29
|
+
def fg *args
|
30
|
+
col :fg, *args
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_palette
|
34
|
+
@@default_palette ||= {
|
35
|
+
'FOCUS' => -> msg { bg(:blue, :normal, fg(:white, :bright, msg)) },
|
36
|
+
'ANY' => -> msg { bg(:cyan, :normal, fg(:white, :bright, msg)) },
|
37
|
+
'FATAL' => -> msg { bg(:red, :bright, fg(:white, :bright, msg)) },
|
38
|
+
'ERROR' => -> msg { fg(:red, :bright, msg) },
|
39
|
+
'WARN' => -> msg { fg(:yellow, :normal, msg) },
|
40
|
+
'INFO' => -> msg { fg(:green, :normal, msg) },
|
41
|
+
'DEBUG' => -> msg { fg(:blue, :normal, msg) },
|
42
|
+
'TRACE' => -> msg { fg(:magenta, :bright, msg) },
|
43
|
+
'DATA' => -> msg { fg(:cyan, :normal, msg) }
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
def palette
|
48
|
+
@palette || default_palette
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
class ExtendedLogger < Logger
|
2
|
+
def self.configure receiver, attribute_name=nil
|
3
|
+
attribute_name ||= 'logger'.freeze
|
4
|
+
setter = "#{attribute_name}=".freeze
|
5
|
+
|
6
|
+
logger = get receiver
|
7
|
+
|
8
|
+
receiver.public_send setter, logger
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.get receiver
|
12
|
+
receiver_name =
|
13
|
+
if receiver.is_a? Module
|
14
|
+
receiver.name
|
15
|
+
else
|
16
|
+
receiver.class.name
|
17
|
+
end
|
18
|
+
|
19
|
+
logger = Factory.()
|
20
|
+
|
21
|
+
logger.progname = "(#{receiver_name})"
|
22
|
+
logger
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.instance
|
26
|
+
@instance ||= Factory.()
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.levels
|
30
|
+
(-5..6)
|
31
|
+
end
|
32
|
+
|
33
|
+
def data *arguments, &block
|
34
|
+
add -2, *arguments, &block
|
35
|
+
end
|
36
|
+
|
37
|
+
def format_severity severity
|
38
|
+
unless self.class.levels.include? severity
|
39
|
+
Kernel.warn "(extended-logger) Unknown log severity level #{severity.inspect}"
|
40
|
+
end
|
41
|
+
|
42
|
+
case severity
|
43
|
+
when -5 then 'OBS_DATA'.freeze
|
44
|
+
when -4 then 'OBS_TRACE'.freeze
|
45
|
+
when -3 then 'OBS_DEBUG'.freeze
|
46
|
+
when -2 then 'DATA'.freeze
|
47
|
+
when -1 then 'TRACE'.freeze
|
48
|
+
when 6 then 'FOCUS'.freeze
|
49
|
+
else super
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def io
|
54
|
+
return unless @logdev
|
55
|
+
@logdev.dev
|
56
|
+
end
|
57
|
+
|
58
|
+
def obs_data *arguments, &block
|
59
|
+
add -5, *arguments, &block
|
60
|
+
end
|
61
|
+
|
62
|
+
def obs_debug *arguments, &block
|
63
|
+
add -3, *arguments, &block
|
64
|
+
end
|
65
|
+
|
66
|
+
def obs_trace *arguments, &block
|
67
|
+
add -4, *arguments, &block
|
68
|
+
end
|
69
|
+
|
70
|
+
def trace *arguments, &block
|
71
|
+
add -1, *arguments, &block
|
72
|
+
end
|
73
|
+
|
74
|
+
def focus *arguments, &block
|
75
|
+
add 6, *arguments, &block
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class ExtendedLogger
|
2
|
+
class Factory
|
3
|
+
attr_reader :env
|
4
|
+
|
5
|
+
def initialize env
|
6
|
+
@env = env
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.build env=nil
|
10
|
+
env ||= ENV
|
11
|
+
new env
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.call *arguments
|
15
|
+
instance = build *arguments
|
16
|
+
instance.()
|
17
|
+
end
|
18
|
+
|
19
|
+
def call
|
20
|
+
logger = ExtendedLogger.new device
|
21
|
+
|
22
|
+
if colors? logger.io
|
23
|
+
logger.formatter = ColoredFormatter.new
|
24
|
+
else
|
25
|
+
logger.formatter = Formatter.new
|
26
|
+
end
|
27
|
+
|
28
|
+
logger
|
29
|
+
end
|
30
|
+
|
31
|
+
def colors? io
|
32
|
+
if io.tty?
|
33
|
+
ENV['LOGGER_COLORS'] != 'off'
|
34
|
+
else
|
35
|
+
ENV['LOGGER_COLORS'] == 'on'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def device
|
40
|
+
ENV['LOGGER_DEVICE'] || $stdout
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class ExtendedLogger
|
2
|
+
class Formatter
|
3
|
+
attr_writer :logger_formatter
|
4
|
+
|
5
|
+
def call *arguments
|
6
|
+
delegate *arguments
|
7
|
+
end
|
8
|
+
|
9
|
+
def delegate *arguments, message
|
10
|
+
message = format_message message, arguments
|
11
|
+
logger_formatter.(*arguments, message)
|
12
|
+
end
|
13
|
+
|
14
|
+
def format_message message, arguments
|
15
|
+
output = ''
|
16
|
+
|
17
|
+
message.each_line "\n".freeze do |line|
|
18
|
+
if line == "\n".freeze
|
19
|
+
line = "\\n"
|
20
|
+
else
|
21
|
+
line.gsub! "\r".freeze, "\\r".freeze
|
22
|
+
end
|
23
|
+
|
24
|
+
if output.empty?
|
25
|
+
output.concat line
|
26
|
+
else
|
27
|
+
formatted_line = logger_formatter.(*arguments, line.chomp("\n".freeze))
|
28
|
+
output.concat formatted_line
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
output.chomp "\n".freeze
|
33
|
+
end
|
34
|
+
|
35
|
+
def logger_formatter
|
36
|
+
@logger_formatter ||= Logger::Formatter.new
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: extended-logger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nathan Ladd
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-18 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: |
|
14
|
+
extended-logger provides a richer logger implementation than the built in ruby
|
15
|
+
logger, offering more log levels and colors. In addition, loggers can be
|
16
|
+
constructed for your classes and modules, which include the constant name in
|
17
|
+
output for easy filtering.
|
18
|
+
email: nathanladd+github@gmail.com
|
19
|
+
executables: []
|
20
|
+
extensions: []
|
21
|
+
extra_rdoc_files: []
|
22
|
+
files:
|
23
|
+
- lib/extended_logger.rb
|
24
|
+
- lib/extended_logger/colored_formatter.rb
|
25
|
+
- lib/extended_logger/extended_logger.rb
|
26
|
+
- lib/extended_logger/factory.rb
|
27
|
+
- lib/extended_logger/formatter.rb
|
28
|
+
homepage:
|
29
|
+
licenses:
|
30
|
+
- MIT
|
31
|
+
metadata: {}
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options: []
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
requirements: []
|
47
|
+
rubyforge_project:
|
48
|
+
rubygems_version: 2.4.5.1
|
49
|
+
signing_key:
|
50
|
+
specification_version: 4
|
51
|
+
summary: Provides an extended logger offering more features than the ruby logger
|
52
|
+
test_files: []
|
53
|
+
has_rdoc:
|