autolog 0.0.1
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 +98 -0
- data/Rakefile +11 -0
- data/lib/autolog.rb +90 -0
- data/lib/autolog/version.rb +3 -0
- metadata +51 -0
data/README.md
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
Autolog
|
2
|
+
=====
|
3
|
+
|
4
|
+
Automatically log tracing events in Ruby more easily.
|
5
|
+
|
6
|
+
To trace Ruby, you can just define `set_trace_func`, e.g.
|
7
|
+
|
8
|
+
set_trace_func proc { |event, file, line, id, binding, classname|
|
9
|
+
printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
|
10
|
+
}
|
11
|
+
t = Test.new
|
12
|
+
t.test
|
13
|
+
|
14
|
+
line prog.rb:11 false
|
15
|
+
c-call prog.rb:11 new Class
|
16
|
+
c-call prog.rb:11 initialize Object
|
17
|
+
c-return prog.rb:11 initialize Object
|
18
|
+
c-return prog.rb:11 new Class
|
19
|
+
line prog.rb:12 false
|
20
|
+
call prog.rb:2 test Test
|
21
|
+
line prog.rb:3 test Test
|
22
|
+
line prog.rb:4 test Test
|
23
|
+
return prog.rb:4 test Test
|
24
|
+
|
25
|
+
But, why not use fewer keystrokes to output debug information?
|
26
|
+
|
27
|
+
Autolog.trace
|
28
|
+
|
29
|
+
### Installation
|
30
|
+
|
31
|
+
In your Gemfile, add:
|
32
|
+
|
33
|
+
gem 'autolog'
|
34
|
+
|
35
|
+
Then:
|
36
|
+
|
37
|
+
bundle install
|
38
|
+
|
39
|
+
### Usage
|
40
|
+
|
41
|
+
Anywhere in your code after the gem is loaded, do one of these:
|
42
|
+
|
43
|
+
Autolog.c_calls
|
44
|
+
Autolog.c_returns
|
45
|
+
Autolog.c_calls_and_returns
|
46
|
+
Autolog.class_starts
|
47
|
+
Autolog.class_ends
|
48
|
+
Autolog.classes
|
49
|
+
Autolog.method_calls
|
50
|
+
Autolog.method_returns
|
51
|
+
Autolog.methods
|
52
|
+
Autolog.lines
|
53
|
+
Autolog.raises
|
54
|
+
Autolog.trace
|
55
|
+
Autolog.event :c_return
|
56
|
+
Autolog.events 'raise', 'c-call'
|
57
|
+
Autolog.events :raise, :c_call
|
58
|
+
Autolog.off
|
59
|
+
|
60
|
+
What they do:
|
61
|
+
|
62
|
+
* `Autolog.c_calls` - logs 'c-call'
|
63
|
+
* `Autolog.c_returns` - logs'c-return'
|
64
|
+
* `Autolog.c_calls_and_returns` - logs 'c-call' and 'c-return'
|
65
|
+
* `Autolog.class_starts` - logs 'class'
|
66
|
+
* `Autolog.class_ends` - logs 'end'
|
67
|
+
* `Autolog.classes` - logs 'class' and 'end'
|
68
|
+
* `Autolog.method_calls` - logs 'call'
|
69
|
+
* `Autolog.method_returns` - logs 'return'
|
70
|
+
* `Autolog.methods` - logs 'call' and 'return'
|
71
|
+
* `Autolog.lines` - logs 'line' (logs every Ruby line executed in this context, similar to a hook into Ruby's caller stack that logs/prints/puts all lines)
|
72
|
+
* `Autolog.raises` - logs 'raise'
|
73
|
+
* `Autolog.events` or `Autolog.event` - logs one or more provided events, converting each to string and substituting '_' with '-', of the supported events in [set_trace_func][set_trace_func]. Calling with no arguments or empty array will log all events.
|
74
|
+
* `Autolog.trace` - logs all events
|
75
|
+
* `Autolog.off` - turns off tracing (calls `set_trace_func nil`)
|
76
|
+
|
77
|
+
### Changing the format, Using another logger, collecting stats, etc.
|
78
|
+
|
79
|
+
Keep the ease of Autolog and its minimal controls while doing nuts things with it:
|
80
|
+
|
81
|
+
Autolog.proc = lambda {|event, file, line, id, binding, classname| puts "#{event} #{file}.#{line} #{binding} #{classname} #{id}"}
|
82
|
+
|
83
|
+
### Warning
|
84
|
+
|
85
|
+
Enabling some of these like lines or trace will significantly slow down execution and may generate a lot of output.
|
86
|
+
|
87
|
+
### Contributing
|
88
|
+
|
89
|
+
It's as easy as [forking][fork], making your changes, and [submitting a pull request][pull].
|
90
|
+
|
91
|
+
### License
|
92
|
+
|
93
|
+
Copyright (c) 2012 Gary S. Weaver, released under the [MIT license][lic].
|
94
|
+
|
95
|
+
[fork]: https://help.github.com/articles/fork-a-repo
|
96
|
+
[pull]: https://help.github.com/articles/using-pull-requests
|
97
|
+
[set_trace_func]: http://apidock.com/ruby/Kernel/set_trace_func
|
98
|
+
[lic]: http://github.com/garysweaver/autolog/blob/master/LICENSE
|
data/Rakefile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rake/testtask'
|
2
|
+
|
3
|
+
#http://nicksda.apotomo.de/2010/10/testing-your-rails-3-engine-sitting-in-a-gem/
|
4
|
+
Rake::TestTask.new(:test) do |t|
|
5
|
+
t.libs << 'test'
|
6
|
+
t.test_files = FileList['test/**/*_test.rb']
|
7
|
+
t.verbose = true
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Run tests"
|
11
|
+
task :default => :test
|
data/lib/autolog.rb
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'autolog/version'
|
2
|
+
|
3
|
+
module Autolog
|
4
|
+
class << self
|
5
|
+
# called procedure instead of proc because set_trace_func proc was calling the proc attribute. Fun!
|
6
|
+
attr_accessor :procedure
|
7
|
+
|
8
|
+
# log all specified events
|
9
|
+
def events(*args)
|
10
|
+
args.flatten!
|
11
|
+
args.collect!{|e|e.to_s.gsub('_','-')}
|
12
|
+
|
13
|
+
# What's up with the Exception hiding?
|
14
|
+
# 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.
|
15
|
+
if args.size == 1
|
16
|
+
eval "set_trace_func proc {|event, file, line, id, binding, classname| begin; Autolog.procedure.call(event, file, line, id, binding, classname) if event == #{args[0].inspect}; rescue SystemExit, Interrupt; raise; rescue Exception; end}"
|
17
|
+
elsif args.size > 1
|
18
|
+
eval "set_trace_func proc {|event, file, line, id, binding, classname| begin; Autolog.procedure.call(event, file, line, id, binding, classname) if #{args.inspect}.include?(event); rescue SystemExit, Interrupt; raise; rescue Exception; end}"
|
19
|
+
else
|
20
|
+
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
|
+
end
|
22
|
+
end
|
23
|
+
alias_method :event, :events
|
24
|
+
|
25
|
+
def trace
|
26
|
+
events
|
27
|
+
end
|
28
|
+
|
29
|
+
# log c-call events only
|
30
|
+
def c_calls
|
31
|
+
events 'c-call'
|
32
|
+
end
|
33
|
+
|
34
|
+
# log c-return events only
|
35
|
+
def c_returns
|
36
|
+
events 'c-return'
|
37
|
+
end
|
38
|
+
|
39
|
+
# log c-call and c-return events only
|
40
|
+
def c_calls_and_returns
|
41
|
+
events 'c-call', 'c-return'
|
42
|
+
end
|
43
|
+
|
44
|
+
# log class events only
|
45
|
+
def class_starts
|
46
|
+
events 'class'
|
47
|
+
end
|
48
|
+
|
49
|
+
# log end events only
|
50
|
+
def class_ends
|
51
|
+
events 'end'
|
52
|
+
end
|
53
|
+
|
54
|
+
# log class and end events only
|
55
|
+
def classes
|
56
|
+
events 'class', 'end'
|
57
|
+
end
|
58
|
+
|
59
|
+
# log call events only
|
60
|
+
def method_calls
|
61
|
+
events 'call'
|
62
|
+
end
|
63
|
+
|
64
|
+
# log return events only
|
65
|
+
def method_returns
|
66
|
+
events 'return'
|
67
|
+
end
|
68
|
+
|
69
|
+
# log call and return events only
|
70
|
+
def methods
|
71
|
+
events 'call', 'return'
|
72
|
+
end
|
73
|
+
|
74
|
+
# log raise events only
|
75
|
+
def raises
|
76
|
+
events 'raise'
|
77
|
+
end
|
78
|
+
|
79
|
+
# log line events only
|
80
|
+
def lines
|
81
|
+
events 'line'
|
82
|
+
end
|
83
|
+
|
84
|
+
def off
|
85
|
+
set_trace_func nil
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
Autolog.procedure = lambda {|event, file, line, id, binding, classname| puts "#{event} #{file}.#{line} #{binding} #{classname} #{id}"}
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: autolog
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Gary S. Weaver
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-10-17 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Automatically log events like executed lines, methods, class and module
|
15
|
+
definitions, C-language routines, and/or raises in Ruby.
|
16
|
+
email:
|
17
|
+
- garysweaver@gmail.com
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- lib/autolog/version.rb
|
23
|
+
- lib/autolog.rb
|
24
|
+
- Rakefile
|
25
|
+
- README.md
|
26
|
+
homepage: https://github.com/garysweaver/autolog
|
27
|
+
licenses:
|
28
|
+
- MIT
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubyforge_project:
|
47
|
+
rubygems_version: 1.8.24
|
48
|
+
signing_key:
|
49
|
+
specification_version: 3
|
50
|
+
summary: Automatically logs Ruby events.
|
51
|
+
test_files: []
|