autolog 0.0.1 → 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.
- data/README.md +65 -5
- data/lib/autolog.rb +91 -26
- data/lib/autolog/methods.rb +25 -0
- data/lib/autolog/version.rb +1 -1
- metadata +2 -1
data/README.md
CHANGED
@@ -22,9 +22,11 @@ To trace Ruby, you can just define `set_trace_func`, e.g.
|
|
22
22
|
line prog.rb:4 test Test
|
23
23
|
return prog.rb:4 test Test
|
24
24
|
|
25
|
-
But, why not use fewer keystrokes to output debug information?
|
25
|
+
But, why not use fewer keystrokes to output debug information? And what about just logging certain sets of events? How about:
|
26
26
|
|
27
|
-
Autolog.
|
27
|
+
Autolog.events :raise, :c_call
|
28
|
+
|
29
|
+
Also, check out the Ruby stdlib's [Tracer][tracer], which does similar if you are just looking for a simple trace or need the other options or added speed that it may provide. Autolog is really just meant to be a shortcut for Kernel's set_trace_func, which is a lot more flexible in some ways, since it lets you hook into/log other types of events specifically.
|
28
30
|
|
29
31
|
### Installation
|
30
32
|
|
@@ -38,7 +40,27 @@ Then:
|
|
38
40
|
|
39
41
|
### Usage
|
40
42
|
|
41
|
-
|
43
|
+
In the main object/IRB, or in any object, call autolog with parameters, e.g.:
|
44
|
+
|
45
|
+
autolog :methods
|
46
|
+
autolog :c_calls
|
47
|
+
autolog :c_returns
|
48
|
+
autolog :c_calls_and_returns
|
49
|
+
autolog :class_starts
|
50
|
+
autolog :class_ends
|
51
|
+
autolog :classes
|
52
|
+
autolog :method_calls
|
53
|
+
autolog :method_returns
|
54
|
+
autolog :methods
|
55
|
+
autolog :lines
|
56
|
+
autolog :raises
|
57
|
+
autolog :trace
|
58
|
+
autolog :event :c_return
|
59
|
+
autolog :events 'raise', 'c-call'
|
60
|
+
autolog :events :raise, :c_call
|
61
|
+
autolog :off
|
62
|
+
|
63
|
+
Or call it on Autolog if that is easier:
|
42
64
|
|
43
65
|
Autolog.c_calls
|
44
66
|
Autolog.c_returns
|
@@ -57,10 +79,47 @@ Anywhere in your code after the gem is loaded, do one of these:
|
|
57
79
|
Autolog.events :raise, :c_call
|
58
80
|
Autolog.off
|
59
81
|
|
60
|
-
|
82
|
+
### Blocks
|
83
|
+
|
84
|
+
autolog do
|
85
|
+
puts "this is something"
|
86
|
+
puts "this is something 2"
|
87
|
+
end
|
88
|
+
|
89
|
+
or
|
90
|
+
|
91
|
+
autolog :methods do
|
92
|
+
# ...
|
93
|
+
end
|
94
|
+
|
95
|
+
or
|
96
|
+
|
97
|
+
autolog :lines do
|
98
|
+
# ...
|
99
|
+
end
|
100
|
+
|
101
|
+
or
|
102
|
+
|
103
|
+
autolog :events, :line, :c_call do
|
104
|
+
# ...
|
105
|
+
end
|
106
|
+
|
107
|
+
or
|
108
|
+
|
109
|
+
Autolog.methods do
|
110
|
+
# ...
|
111
|
+
end
|
112
|
+
|
113
|
+
or
|
114
|
+
|
115
|
+
Autolog.events :line, :c_call do
|
116
|
+
# ...
|
117
|
+
end
|
118
|
+
|
119
|
+
### What you can trace
|
61
120
|
|
62
121
|
* `Autolog.c_calls` - logs 'c-call'
|
63
|
-
* `Autolog.c_returns` - logs'c-return'
|
122
|
+
* `Autolog.c_returns` - logs 'c-return'
|
64
123
|
* `Autolog.c_calls_and_returns` - logs 'c-call' and 'c-return'
|
65
124
|
* `Autolog.class_starts` - logs 'class'
|
66
125
|
* `Autolog.class_ends` - logs 'end'
|
@@ -94,5 +153,6 @@ Copyright (c) 2012 Gary S. Weaver, released under the [MIT license][lic].
|
|
94
153
|
|
95
154
|
[fork]: https://help.github.com/articles/fork-a-repo
|
96
155
|
[pull]: https://help.github.com/articles/using-pull-requests
|
156
|
+
[tracer]: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/tracer/rdoc/index.html
|
97
157
|
[set_trace_func]: http://apidock.com/ruby/Kernel/set_trace_func
|
98
158
|
[lic]: http://github.com/garysweaver/autolog/blob/master/LICENSE
|
data/lib/autolog.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'autolog/version'
|
2
|
+
require 'autolog/methods'
|
2
3
|
|
3
4
|
module Autolog
|
4
5
|
class << self
|
@@ -9,6 +10,7 @@ module Autolog
|
|
9
10
|
def events(*args)
|
10
11
|
args.flatten!
|
11
12
|
args.collect!{|e|e.to_s.gsub('_','-')}
|
13
|
+
puts "events method received #{args.inspect}"
|
12
14
|
|
13
15
|
# What's up with the Exception hiding?
|
14
16
|
# Ruby bug 7180: can use up 100% cpu in 1.9.3p194 if let anything be raised. We'll silently rescue and ignore issues. Otherwise, it produces a deluge of output.
|
@@ -19,72 +21,135 @@ module Autolog
|
|
19
21
|
else
|
20
22
|
set_trace_func proc {|event, file, line, id, binding, classname| begin; Autolog.procedure.call(event, file, line, id, binding, classname); rescue SystemExit, Interrupt; raise; rescue Exception; end}
|
21
23
|
end
|
24
|
+
|
25
|
+
if block_given?
|
26
|
+
yield
|
27
|
+
off
|
28
|
+
end
|
22
29
|
end
|
23
30
|
alias_method :event, :events
|
24
31
|
|
25
|
-
def trace
|
26
|
-
|
32
|
+
def trace(*args)
|
33
|
+
if block_given?
|
34
|
+
events args, &Proc.new
|
35
|
+
else
|
36
|
+
events args
|
37
|
+
end
|
27
38
|
end
|
28
39
|
|
29
40
|
# log c-call events only
|
30
|
-
def c_calls
|
31
|
-
|
41
|
+
def c_calls(*args)
|
42
|
+
if block_given?
|
43
|
+
events ['c-call', args].flatten, &Proc.new
|
44
|
+
else
|
45
|
+
events ['c-call', args].flatten
|
46
|
+
end
|
32
47
|
end
|
33
48
|
|
34
49
|
# log c-return events only
|
35
|
-
def c_returns
|
36
|
-
|
50
|
+
def c_returns(*args)
|
51
|
+
if block_given?
|
52
|
+
events ['c-return', args].flatten, &Proc.new
|
53
|
+
else
|
54
|
+
events ['c-return', args].flatten
|
55
|
+
end
|
37
56
|
end
|
38
57
|
|
39
58
|
# log c-call and c-return events only
|
40
|
-
def c_calls_and_returns
|
41
|
-
|
59
|
+
def c_calls_and_returns(*args)
|
60
|
+
if block_given?
|
61
|
+
events ['c-call', 'c-return', args].flatten, &Proc.new
|
62
|
+
else
|
63
|
+
events ['c-call', 'c-return', args].flatten
|
64
|
+
end
|
42
65
|
end
|
43
66
|
|
44
67
|
# log class events only
|
45
|
-
def class_starts
|
46
|
-
|
68
|
+
def class_starts(*args)
|
69
|
+
if block_given?
|
70
|
+
events ['class', args].flatten, &Proc.new
|
71
|
+
else
|
72
|
+
events ['class', args].flatten
|
73
|
+
end
|
47
74
|
end
|
48
75
|
|
49
76
|
# log end events only
|
50
|
-
def class_ends
|
51
|
-
|
77
|
+
def class_ends(*args)
|
78
|
+
if block_given?
|
79
|
+
events ['end', args].flatten, &Proc.new
|
80
|
+
else
|
81
|
+
events ['end', args].flatten
|
82
|
+
end
|
52
83
|
end
|
53
84
|
|
54
85
|
# log class and end events only
|
55
|
-
def classes
|
56
|
-
|
86
|
+
def classes(*args)
|
87
|
+
if block_given?
|
88
|
+
events ['class', 'end', args].flatten, &Proc.new
|
89
|
+
else
|
90
|
+
events ['class', 'end', args].flatten
|
91
|
+
end
|
57
92
|
end
|
58
93
|
|
59
94
|
# log call events only
|
60
|
-
def method_calls
|
61
|
-
|
95
|
+
def method_calls(*args)
|
96
|
+
if block_given?
|
97
|
+
events ['call', args].flatten, &Proc.new
|
98
|
+
else
|
99
|
+
events ['call', args].flatten
|
100
|
+
end
|
62
101
|
end
|
63
102
|
|
64
103
|
# log return events only
|
65
|
-
def method_returns
|
66
|
-
|
104
|
+
def method_returns(*args)
|
105
|
+
if block_given?
|
106
|
+
events ['return', args].flatten, &Proc.new
|
107
|
+
else
|
108
|
+
events ['return', args].flatten
|
109
|
+
end
|
67
110
|
end
|
68
111
|
|
69
112
|
# log call and return events only
|
70
|
-
def methods
|
71
|
-
|
113
|
+
def methods(*args)
|
114
|
+
if block_given?
|
115
|
+
events ['call', 'return'], &Proc.new
|
116
|
+
else
|
117
|
+
events ['call', 'return', args].flatten
|
118
|
+
end
|
72
119
|
end
|
73
120
|
|
74
121
|
# log raise events only
|
75
|
-
def raises
|
76
|
-
|
122
|
+
def raises(*args)
|
123
|
+
if block_given?
|
124
|
+
events ['raise', args].flatten, &Proc.new
|
125
|
+
else
|
126
|
+
events ['raise', args].flatten
|
127
|
+
end
|
77
128
|
end
|
78
129
|
|
79
130
|
# log line events only
|
80
|
-
def lines
|
81
|
-
|
131
|
+
def lines(*args)
|
132
|
+
if block_given?
|
133
|
+
events ['line', args].flatten, &Proc.new
|
134
|
+
else
|
135
|
+
events ['line', args].flatten
|
136
|
+
end
|
82
137
|
end
|
83
138
|
|
84
|
-
|
139
|
+
# turn logging off
|
140
|
+
def off(*args)
|
141
|
+
# accepts *args to make implementation of autolog in methods easier, but ignores them
|
85
142
|
set_trace_func nil
|
86
143
|
end
|
87
144
|
end
|
88
145
|
end
|
89
146
|
|
90
|
-
Autolog.procedure = lambda {|event, file, line, id, binding, classname| puts "#{event} #{file}.#{line} #{binding} #{classname} #{id}"}
|
147
|
+
Autolog.procedure = lambda {|event, file, line, id, binding, classname| begin; puts "#{event} #{file}.#{line} #{binding} #{classname} #{id}"; rescue SystemExit, Interrupt; raise; rescue Exception; end}
|
148
|
+
|
149
|
+
class Object
|
150
|
+
# make autolog a method in any object
|
151
|
+
extend Autolog::Methods
|
152
|
+
end
|
153
|
+
|
154
|
+
# make autolog a method in main
|
155
|
+
TOPLEVEL_BINDING.eval('include Autolog::Methods')
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Autolog
|
2
|
+
module Methods
|
3
|
+
def autolog(*args)
|
4
|
+
args.flatten!
|
5
|
+
puts "autolog method got #{args.inspect}"
|
6
|
+
if args.size > 0
|
7
|
+
if Autolog.respond_to?(args[0])
|
8
|
+
if block_given?
|
9
|
+
Autolog.send(args.delete_at(0), args, &Proc.new)
|
10
|
+
else
|
11
|
+
Autolog.send(args.delete_at(0), args)
|
12
|
+
end
|
13
|
+
elsif block_given?
|
14
|
+
Autolog.events args, &Proc.new
|
15
|
+
else
|
16
|
+
Autolog.events args
|
17
|
+
end
|
18
|
+
elsif block_given?
|
19
|
+
Autolog.events &Proc.new
|
20
|
+
else
|
21
|
+
Autolog.events
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/autolog/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autolog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -19,6 +19,7 @@ executables: []
|
|
19
19
|
extensions: []
|
20
20
|
extra_rdoc_files: []
|
21
21
|
files:
|
22
|
+
- lib/autolog/methods.rb
|
22
23
|
- lib/autolog/version.rb
|
23
24
|
- lib/autolog.rb
|
24
25
|
- Rakefile
|