Need help with rotoscope?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

Shopify
150 Stars 7 Forks MIT License 209 Commits 3 Opened issues

Description

High-performance logger of Ruby method invocations

Services available

!
?

Need anything else?

Contributors list

Rotoscope

Rotoscope is a high-performance logger of Ruby method invocations.

Status

Build Status Gem Version

Rotoscope is subject to breaking changes in minor versions until

1.0
is available.

Example

require 'rotoscope'

class Dog def bark Noisemaker.speak('woof!') end end

class Noisemaker def self.speak(str) puts(str) end end

log_file = File.expand_path('dog_trace.log') puts "Writing to #{log_file}..."

Rotoscope::CallLogger.trace(log_file) do dog1 = Dog.new dog1.bark end

The resulting method calls are saved in the specified

dest
in the order they were received.

Sample output:

entity,method_name,method_level,filepath,lineno,caller_entity,caller_method_name,caller_method_level
Dog,new,class,example/dog.rb,19,,,
Dog,initialize,instance,example/dog.rb,19,Dog,new,class
Dog,bark,instance,example/dog.rb,20,,,
Noisemaker,speak,class,example/dog.rb,5,Dog,bark,instance
Noisemaker,puts,class,example/dog.rb,11,Noisemaker,speak,class
IO,puts,instance,example/dog.rb,11,Noisemaker,puts,class
IO,write,instance,example/dog.rb,11,IO,puts,instance
IO,write,instance,example/dog.rb,11,IO,puts,instance

API


Public Class Methods

Rotoscope::CallLogger::trace(dest, blacklist: [])

Writes all calls of methods to

dest
, except for those whose filepath contains any entry in
blacklist
.
dest
is either a filename or an
IO
. Methods invoked at the top of the trace will have a caller entity of
 and a caller method name of 
.
Rotoscope::CallLogger.trace(dest) { |rs| ... }
# or...
Rotoscope::CallLogger.trace(dest, blacklist: ["/.gem/"]) { |rs| ... }

Rotoscope::CallLogger::new(dest, blacklist: [])

Same interface as

Rotoscope::CallLogger::trace
, but returns a
Rotoscope::CallLogger
instance, allowing fine-grain control via
Rotoscope::CallLogger#start_trace
and
Rotoscope::CallLogger#stop_trace
. ```ruby rs = Rotoscope::CallLogger.new(dest)

or...

rs = Rotoscope::CallLogger.new(dest, blacklist: ["/.gem/"]) ```


Public Instance Methods

Rotoscope::CallLogger#trace(&block)

Similar to

Rotoscope::CallLogger::trace
, but does not need to create a file handle on invocation.
rs = Rotoscope::CallLogger.new(dest)
rs.trace do |rotoscope|
  # code to trace...
end

Rotoscope::CallLogger#start_trace

Begins writing method calls to the

dest
specified in the initializer.
rs = Rotoscope::CallLogger.new(dest)
rs.start_trace
# code to trace...
rs.stop_trace

Rotoscope::CallLogger#stop_trace

Stops writing method invocations to the

dest
. Subsequent calls to
Rotoscope::CallLogger#start_trace
may be invoked to resume tracing.
rs = Rotoscope::CallLogger.new(dest)
rs.start_trace
# code to trace...
rs.stop_trace

Rotoscope::CallLogger#mark(str = "")

Inserts a marker '--- ' to divide output. Useful for segmenting multiple blocks of code that are being profiled. If

str
is provided, the line will be prefixed by '--- ', followed by the string passed.
rs = Rotoscope::CallLogger.new(dest)
rs.start_trace
# code to trace...
rs.mark('Something goes wrong here') # produces `--- Something goes wrong here` in the output
# more code ...
rs.stop_trace

Rotoscope::CallLogger#close

Flushes the buffer and closes the file handle. Once this is invoked, no more writes can be performed on the

Rotoscope::CallLogger
object. Sets
state
to
:closed
.
rs = Rotoscope::CallLogger.new(dest)
rs.trace { |rotoscope| ... }
rs.close

Rotoscope::CallLogger#state

Returns the current state of the Rotoscope::CallLogger object. Valid values are

:open
,
:tracing
and
:closed
.
rs = Rotoscope::CallLogger.new(dest)
rs.state # :open
rs.trace do
  rs.state # :tracing
end
rs.close
rs.state # :closed

Rotoscope::CallLogger#closed?

Shorthand to check if the

state
is set to
:closed
.
rs = Rotoscope::CallLogger.new(dest)
rs.closed? # false
rs.close
rs.closed? # true

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.