logue 1.0.18 → 1.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.
Files changed (68) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +0 -0
  3. data/.glarkrc +0 -0
  4. data/.idea/.gitignore +10 -0
  5. data/.idea/aws.xml +11 -0
  6. data/.idea/codeStyles/Project.xml +7 -0
  7. data/.idea/codeStyles/codeStyleConfig.xml +5 -0
  8. data/.idea/inspectionProfiles/Project_Default.xml +11 -0
  9. data/.idea/libraries/pkg.xml +16 -0
  10. data/.idea/logue.iml +53 -0
  11. data/.idea/misc.xml +9 -0
  12. data/.idea/modules.xml +8 -0
  13. data/.idea/vcs.xml +6 -0
  14. data/Gemfile +0 -0
  15. data/Gemfile.lock +8 -8
  16. data/LICENSE.txt +0 -0
  17. data/README.md +0 -0
  18. data/lib/logue/{colorlog.rb → colorable.rb} +6 -27
  19. data/lib/logue/core/applog.rb +18 -0
  20. data/lib/logue/core/base_loggable.rb +58 -0
  21. data/lib/logue/core/base_writer.rb +23 -0
  22. data/lib/logue/core/dynamic.rb +17 -0
  23. data/lib/logue/core/object_util.rb +6 -0
  24. data/lib/logue/elements/base_element.rb +21 -0
  25. data/lib/logue/elements/block_element.rb +16 -0
  26. data/lib/logue/elements/element.rb +13 -0
  27. data/lib/logue/elements/element_factory.rb +48 -0
  28. data/lib/logue/elements/element_lines.rb +23 -0
  29. data/lib/logue/elements/elements_log.rb +21 -0
  30. data/lib/logue/elements/elements_loggable.rb +17 -0
  31. data/lib/logue/elements/elements_writer.rb +33 -0
  32. data/lib/logue/elements/enum_element.rb +12 -0
  33. data/lib/logue/elements/hash_element.rb +9 -0
  34. data/lib/logue/elements/indexed_element.rb +15 -0
  35. data/lib/logue/elements/msg_element.rb +13 -0
  36. data/lib/logue/elements/msg_obj_element.rb +13 -0
  37. data/lib/logue/elements/struct_element.rb +9 -0
  38. data/lib/logue/elements/verbose_element.rb +18 -0
  39. data/lib/logue/filter.rb +8 -49
  40. data/lib/logue/{location_format.rb → format/location_format.rb} +16 -11
  41. data/lib/logue/format/pathutil.rb +36 -0
  42. data/lib/logue/legacy_logger.rb +7 -18
  43. data/lib/logue/level.rb +0 -11
  44. data/lib/logue/levels/level_logger.rb +55 -0
  45. data/lib/logue/lines/line_base.rb +4 -0
  46. data/lib/logue/lines/line_block.rb +11 -0
  47. data/lib/logue/lines/line_msg_block.rb +12 -0
  48. data/lib/logue/lines/line_msg_obj.rb +19 -0
  49. data/lib/logue/lines/lines_factory.rb +19 -0
  50. data/lib/logue/lines/lines_writer.rb +29 -0
  51. data/lib/logue/locations/frame.rb +19 -0
  52. data/lib/logue/locations/location.rb +17 -0
  53. data/lib/logue/locations/location_writer.rb +13 -0
  54. data/lib/logue/{stack.rb → locations/stack.rb} +5 -7
  55. data/lib/logue/log.rb +27 -60
  56. data/lib/logue/loggable.rb +4 -20
  57. data/lib/logue/logger.rb +28 -81
  58. data/lib/logue/version.rb +1 -4
  59. data/lib/logue/writer.rb +2 -31
  60. data/lib/logue/writer2.rb +5 -0
  61. data/lib/logue.rb +3 -3
  62. data/logue.gemspec +3 -3
  63. metadata +58 -22
  64. data/lib/logue/element.rb +0 -16
  65. data/lib/logue/frame.rb +0 -37
  66. data/lib/logue/line.rb +0 -44
  67. data/lib/logue/location.rb +0 -24
  68. data/lib/logue/pathutil.rb +0 -39
@@ -0,0 +1,13 @@
1
+ require 'logue/elements/element'
2
+
3
+ module Logue
4
+ class MsgObjElement < Element
5
+ def write_element
6
+ if @msg == ObjectUtil::NONE
7
+ write_line @object.to_s
8
+ else
9
+ write_line "#{@msg}: #{@object}"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ require 'logue/elements/enum_element'
2
+
3
+ module Logue
4
+ class StructElement < EnumerableElement
5
+ def write_element
6
+ write_enumerator @object.each_pair
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,18 @@
1
+ require 'logue/elements/element'
2
+
3
+ module Logue
4
+ class VerboseElement < Element
5
+ def write_element
6
+ obj = @object
7
+ write_msg_object @msg, "verbose"
8
+ write_msg_object @msg + ".class", obj.class
9
+ write_msg_object @msg + ".id", obj.object_id
10
+ write_msg_object @msg, obj
11
+ vars = obj.instance_variables
12
+ vars.each do |v|
13
+ value = obj.instance_variable_get v
14
+ write_msg_object @msg + "." + v.to_s, value
15
+ end
16
+ end
17
+ end
18
+ end
data/lib/logue/filter.rb CHANGED
@@ -1,60 +1,19 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
1
  require 'pathname'
5
2
 
6
3
  module Logue
7
4
  class Filter
8
- include Comparable
9
-
10
- attr_reader :ignored_files
11
- attr_reader :ignored_methods
12
- attr_reader :ignored_classes
13
-
14
- def initialize ignored_files: Array.new, ignored_methods: Array.new, ignored_classes: Array.new
15
- @ignored_files = ignored_files
16
- @ignored_methods = ignored_methods
17
- @ignored_classes = ignored_classes
18
- end
19
-
20
- def ignore_file file
21
- @ignored_files << file
22
- end
23
-
24
- def log_file file
25
- @ignored_files.delete file
26
- end
5
+ attr_reader :files
6
+ attr_reader :methods
7
+ attr_reader :classes
27
8
 
28
- def ignore_class cls
29
- @ignored_classes << cls
30
- end
31
-
32
- def log_class cls
33
- @ignored_classes.delete cls
34
- end
35
-
36
- def ignore_method meth
37
- @ignored_methods << meth
38
- end
39
-
40
- def log_method meth
41
- @ignored_methods.delete meth
9
+ def initialize files: Array.new, methods: Array.new, classes: Array.new
10
+ @files = files
11
+ @methods = methods
12
+ @classes = classes
42
13
  end
43
14
 
44
15
  def log? file, cls, meth
45
- !@ignored_files.include?(file) && !@ignored_classes.include?(cls) && !@ignored_methods.include?(meth)
46
- end
47
-
48
- def compare_fields
49
- [ :ignored_files, :ignored_methods, :ignored_classes ]
50
- end
51
-
52
- def <=> other
53
- compare_fields.each do |field|
54
- cmp = send(field) <=> other.send(field)
55
- return cmp if cmp.nonzero?
56
- end
57
- 0
16
+ !@files.include?(file) && !@classes.include?(cls) && !@methods.include?(meth)
58
17
  end
59
18
  end
60
19
  end
@@ -1,26 +1,23 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
- require 'logue/pathutil'
1
+ require 'logue/format/pathutil'
5
2
 
6
3
  module Logue
7
4
  class LocationFormat
8
5
  module Defaults
9
6
  FILENAME = -25
10
- LINE = 4
11
- METHOD = -20
7
+ LINE = 4
8
+ METHOD = -20
12
9
  end
13
-
10
+
14
11
  attr_accessor :file
15
12
  attr_accessor :line
16
13
  attr_accessor :method
17
-
14
+
18
15
  def initialize file: Defaults::FILENAME, line: Defaults::LINE, method: Defaults::METHOD
19
- @file = file
20
- @line = line
16
+ @file = file
17
+ @line = line
21
18
  @method = method
22
19
  end
23
-
20
+
24
21
  def format path, line, cls, methname
25
22
  name = cls ? cls.to_s + "#" + methname : methname
26
23
  path = PathUtil.trim_right path.to_s, @file.abs
@@ -28,8 +25,16 @@ module Logue
28
25
  sprintf format_string, path, line, name
29
26
  end
30
27
 
28
+ def format_location location
29
+ format location.path, location.line, location.cls, location.method
30
+ end
31
+
31
32
  def format_string
32
33
  "[%#{@file}s:%#{@line}d] {%#{@method}s}"
33
34
  end
35
+
36
+ def to_s
37
+ inspect
38
+ end
34
39
  end
35
40
  end
@@ -0,0 +1,36 @@
1
+ module Logue
2
+ module PathUtil
3
+ extend self
4
+
5
+ def trim_left str, maxlen
6
+ str[0, maxlen] || ""
7
+ end
8
+
9
+ def trim_right str, maxlen
10
+ if str.length > maxlen
11
+ trim_path_right str, maxlen
12
+ else
13
+ str
14
+ end
15
+ end
16
+
17
+ def trim_path_right path, maxlen
18
+ return "" if maxlen < 0
19
+ comps = path.split "/"
20
+ str = comps.pop
21
+ comps.reverse.each do |comp|
22
+ newstr = comp + "/" + str
23
+ if newstr.length + 4 <= maxlen
24
+ str = newstr
25
+ else
26
+ newstr = ".../" + str
27
+ if newstr.length <= maxlen
28
+ str = newstr
29
+ end
30
+ break
31
+ end
32
+ end
33
+ str
34
+ end
35
+ end
36
+ end
@@ -1,16 +1,5 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
- #
4
- # = legacy_logger.rb
5
- #
6
- # Logging Module
7
- #
8
- # Author:: Jeff Pace <jeugenepace@gmail.com>
9
- # Documentation:: Author
10
- #
11
-
12
1
  require 'logue/filter'
13
- require 'logue/location_format'
2
+ require 'logue/format/location_format'
14
3
 
15
4
  module Logue
16
5
  module LegacyLogger
@@ -19,27 +8,27 @@ module Logue
19
8
  end
20
9
 
21
10
  def ignore_file fname
22
- filter.ignore_file fname
11
+ filter.files << fname
23
12
  end
24
13
 
25
14
  def ignore_method methname
26
- filter.ignore_method methname
15
+ filter.methods << methname
27
16
  end
28
17
 
29
18
  def ignore_class classname
30
- filter.ignore_class classname
19
+ filter.classes << classname
31
20
  end
32
21
 
33
22
  def log_file fname
34
- filter.log_file fname
23
+ filter.files.delete fname
35
24
  end
36
25
 
37
26
  def log_method methname
38
- filter.log_method methname
27
+ filter.methods.delete methname
39
28
  end
40
29
 
41
30
  def log_class classname
42
- filter.log_class classname
31
+ filter.classes.delete classname
43
32
  end
44
33
 
45
34
  def output
data/lib/logue/level.rb CHANGED
@@ -1,14 +1,3 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
- #
4
- # = level.rb
5
- #
6
- # Logging Module
7
- #
8
- # Author:: Jeff Pace <jeugenepace@gmail.com>
9
- # Documentation:: Author
10
- #
11
-
12
1
  module Logue
13
2
  class Level
14
3
  DEBUG = 0
@@ -0,0 +1,55 @@
1
+ require 'logue/level'
2
+ require 'logue/core/object_util'
3
+
4
+ module Logue
5
+ class LevelLogger
6
+ attr_accessor :level
7
+
8
+ def initialize level: Level::WARN
9
+ @level = level
10
+ end
11
+
12
+ def verbose= v
13
+ @level = case v
14
+ when TrueClass
15
+ Level::DEBUG
16
+ when FalseClass
17
+ Level::FATAL
18
+ else
19
+ v
20
+ end
21
+ end
22
+
23
+ def verbose
24
+ @level <= Level::DEBUG
25
+ end
26
+
27
+ def quiet?
28
+ @level >= Level::WARN
29
+ end
30
+
31
+ def quiet= b
32
+ @level = b ? Level::WARN : Level::DEBUG
33
+ end
34
+
35
+ { :debug => Level::DEBUG, :info => Level::INFO, :warn => Level::WARN, :error => Level::ERROR, :fatal => Level::FATAL, :write => Level::WARN }.each do |methname, level|
36
+ define_method methname do |msg = ObjectUtil::NONE, obj = nil, classname: nil, &blk|
37
+ log msg, obj, level: level, classname: classname, &blk
38
+ end
39
+ end
40
+
41
+ # Logs the given message.
42
+ def log msg = ObjectUtil::NONE, obj = ObjectUtil::NONE, level: Level::DEBUG, classname: nil, &blk
43
+ log_frames msg, obj, classname: classname, level: level, nframes: 0, &blk
44
+ end
45
+
46
+ # Writes the current stack, from where this method was invoked.
47
+ def stack msg = ObjectUtil::NONE, obj = ObjectUtil::NONE, level: Level::DEBUG, classname: nil, &blk
48
+ log_frames msg, obj, classname: classname, level: level, nframes: -1, &blk
49
+ end
50
+
51
+ def log_frames msg, obj = ObjectUtil::NONE, classname: nil, level: nil, nframes: -1, &blk
52
+ raise "not implemented for LevelLogger"
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,4 @@
1
+ module Logue
2
+ class LineBase
3
+ end
4
+ end
@@ -0,0 +1,11 @@
1
+ module Logue
2
+ class LineBlock
3
+ def initialize blk
4
+ @blk = blk
5
+ end
6
+
7
+ def message_string
8
+ @blk.call.to_s
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module Logue
2
+ class LineMsgBlock
3
+ def initialize msg, blk
4
+ @msg = msg
5
+ @blk = blk
6
+ end
7
+
8
+ def message_string
9
+ @msg.to_s + ": " + @blk.call.to_s
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ module Logue
2
+ class LineMsgObj
3
+ attr_reader :msg
4
+ attr_reader :obj
5
+
6
+ def initialize msg, obj = nil
7
+ @msg = msg
8
+ @obj = obj
9
+ end
10
+
11
+ def message_string
12
+ if @obj
13
+ @msg.to_s + ": " + @obj.to_s
14
+ else
15
+ @msg.to_s
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'logue/lines/line_msg_block'
2
+ require 'logue/lines/line_msg_obj'
3
+ require 'logue/lines/line_block'
4
+
5
+ module Logue
6
+ class LineFactory
7
+ def create msg, obj, &blk
8
+ if blk
9
+ if msg
10
+ LineMsgBlock.new msg, blk
11
+ else
12
+ LineBlock.new blk
13
+ end
14
+ else
15
+ LineMsgObj.new msg, obj
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,29 @@
1
+ require 'logue/lines/line_msg_block'
2
+ require 'logue/lines/line_block'
3
+ require 'logue/lines/line_msg_obj'
4
+ require 'logue/core/base_writer'
5
+
6
+ module Logue
7
+ class LinesWriter < BaseWriter
8
+ def write_msg_obj location, msg, obj, level
9
+ line = LineMsgObj.new msg, obj
10
+ write_line location, line, level
11
+ end
12
+
13
+ def write_msg_blk location, msg, level, &blk
14
+ line = LineMsgBlock msg, &blk
15
+ write_line location, line, level
16
+ end
17
+
18
+ def write_block location, level, &blk
19
+ line = LineBlock.new blk
20
+ write_line location, line, level
21
+ end
22
+
23
+ def write_line location, line, level
24
+ linestr = line.message_string
25
+ lstr = location + " " + linestr
26
+ print lstr, level
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ require 'pathname'
2
+
3
+ module Logue
4
+ class Frame
5
+ FRAME_RE = Regexp.new '(.*):(\d+)(?::in \`(.*)\')?'
6
+
7
+ attr_reader :path, :line, :method
8
+
9
+ def initialize entry: nil, path: nil, line: nil, method: nil
10
+ @path = path
11
+ @line = line
12
+ @method = method
13
+ end
14
+
15
+ def to_s
16
+ [:path, :line, :method].collect { |field| "#{field}: " + send(field).to_s }.join ", "
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ require 'logue/format/location_format'
2
+
3
+ module Logue
4
+ class Location
5
+ attr_reader :path
6
+ attr_reader :line
7
+ attr_reader :cls
8
+ attr_reader :method
9
+
10
+ def initialize path, line, cls, method
11
+ @path = path
12
+ @line = line
13
+ @cls = cls
14
+ @method = method
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ require 'logue/locations/location'
2
+
3
+ module Logue
4
+ class LocationWriter
5
+ def initialize format
6
+ @format = format
7
+ end
8
+
9
+ def to_string location
10
+ @format.format_location location
11
+ end
12
+ end
13
+ end
@@ -1,24 +1,22 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
- require 'logue/frame'
1
+ require 'logue/locations/frame'
5
2
 
6
3
  module Logue
7
4
  class Stack
5
+ FILTER_RE = Regexp.new 'logue.*/lib/logue'
6
+
8
7
  attr_reader :frames
9
8
 
10
9
  def initialize depth: 2
11
10
  # caller_locations requires Ruby 2.0+
12
11
  locations = caller_locations depth
13
- @frames = locations.collect do |loc|
12
+ @frames = locations&.collect do |loc|
14
13
  # no absolute_path from "(eval)"
15
14
  Frame.new path: loc.absolute_path || loc.path, line: loc.lineno, method: loc.label
16
15
  end
17
16
  end
18
17
 
19
18
  def filtered
20
- re = Regexp.new 'logue.*/lib/logue'
21
- logframe = @frames.rindex { |frm| frm.path.index re }
19
+ logframe = @frames.rindex { |frm| frm.path.index FILTER_RE }
22
20
  @frames[logframe + 1 .. -1]
23
21
  end
24
22
  end
data/lib/logue/log.rb CHANGED
@@ -10,6 +10,7 @@
10
10
  #
11
11
 
12
12
  require 'logue/logger'
13
+ require 'logue/writer'
13
14
 
14
15
  #
15
16
  # == Log
@@ -46,91 +47,57 @@ require 'logue/logger'
46
47
 
47
48
  module Logue
48
49
  class Log
49
- # by default, class methods delegate to a single app-wide log.
50
+ extend Dynamic
51
+
52
+ def self.reset
53
+ @logger = Logger.new writer: Writer.new
54
+ end
50
55
 
51
- @logger = Logger.new
56
+ reset
57
+
58
+ # by default, class methods delegate to a single app-wide log.
52
59
 
53
60
  # Returns the app-wide logger of the log.
54
61
  def self.logger
55
62
  @logger
56
63
  end
57
64
 
58
- def self.accessors methname
59
- [ methname.to_sym, (methname.to_s + "=").to_sym ]
60
- end
61
-
62
- def self.logger_methods
63
- @logger_delegated ||= Array.new.tap do |ary|
64
- acc_methods = [
65
- :colorize_line,
66
- :format,
67
- :level,
68
- :outfile,
69
- :output,
70
- :quiet,
71
- :verbose,
72
- ]
73
- ary.concat acc_methods.inject(Array.new) { |a, m| a.concat accessors(m) }
74
- read_methods = [
75
- :ignore_class,
76
- :ignore_file,
77
- :ignore_method,
78
- :log_class,
79
- :log_file,
80
- :log_method,
81
- :set_color,
82
- :set_default_widths,
83
- :set_widths,
84
- ]
85
- ary.concat read_methods
86
- logging_methods = [
87
- :debug,
88
- :error,
89
- :fatal,
90
- :info,
91
- :log,
92
- :stack,
93
- :warn,
94
- :write,
95
- ]
96
- ary.concat logging_methods
97
- end
98
- end
99
-
100
- def self.logger_delegated? meth
101
- self.logger_methods.include? meth
65
+ def self.logger= logger
66
+ @logger = logger
102
67
  end
103
68
 
104
69
  def self.methods all = true
105
- super + self.logger_methods + colors
106
- end
107
-
108
- def self.has_color? color
109
- colors.include? color
70
+ super + logger.methods + colors
110
71
  end
111
72
 
112
73
  def self.colors
113
74
  logger.valid_colors.keys
114
75
  end
115
76
 
116
- def self.delegated? meth
117
- logger_delegated?(meth) || has_color?(meth)
118
- end
119
-
120
77
  def self.method_missing meth, *args, &blk
121
- if delegated? meth
122
- logger.send meth, *args, &blk
78
+ if logger.respond_to? meth
79
+ if blk
80
+ add_class_method meth do |*args1, &blk1|
81
+ @logger.send meth, *args1, blk1
82
+ end
83
+ @logger.send meth, *args, &blk
84
+ else
85
+ add_class_method meth do |*args1|
86
+ @logger.send meth, *args1
87
+ end
88
+ @logger.send meth, *args
89
+ end
123
90
  else
124
91
  super
125
92
  end
126
93
  end
127
94
 
128
95
  def self.respond_to? meth
129
- methods.include? meth
96
+ super || methods.include?(meth)
130
97
  end
131
98
 
132
- def self.respond_to_missing? *args
133
- methods.include? args.first
99
+ def self.respond_to_missing? * args
100
+ super || methods.include?(args.first)
134
101
  end
135
102
  end
136
103
  end
@@ -11,7 +11,8 @@
11
11
 
12
12
  require 'logue/logger'
13
13
  require 'logue/log'
14
- require 'logue/colorlog'
14
+ require 'logue/core/object_util'
15
+ require 'logue/core/base_loggable'
15
16
 
16
17
  #
17
18
  # == Loggable
@@ -41,29 +42,12 @@ require 'logue/colorlog'
41
42
 
42
43
  module Logue
43
44
  module Loggable
45
+ include BaseLoggable
46
+
44
47
  def logger
45
48
  @logger ||= Log.logger
46
49
  end
47
50
 
48
- [ :stack, :log ].each do |methname|
49
- define_method methname do |msg = '', obj = nil, level = Level::DEBUG, &blk|
50
- logger.send methname, msg, obj, level: level, classname: self.class.to_s, &blk
51
- end
52
- end
53
-
54
- [ :debug, :info, :warn, :error, :fatal, :write ].each do |methname|
55
- define_method methname do |msg = '', obj = nil, &blk|
56
- logger.send methname, msg, obj, classname: self.class.to_s, &blk
57
- end
58
- end
59
-
60
- Rainbow::Color::Named::NAMES.each do |color, code|
61
- define_method color do |msg = '', obj = nil, level = Level::DEBUG, &blk|
62
- colmsg = "\e[#{30 + code}m#{msg}\e[0m"
63
- logger.log colmsg, obj, level: level, classname: self.class.to_s, &blk
64
- end
65
- end
66
-
67
51
  def logger= logger
68
52
  @logger = logger
69
53
  end