Class: Gless::Logger
- Inherits:
-
Object
- Object
- Gless::Logger
- Defined in:
- lib/gless/logger.rb
Overview
Provides some wrapping around the normal Logger class. In particular, Gless::Logger has a concept of a replay log, which is an attempt to lay out all the things that happened during its interactions with the browser, including screenshots and HTML source at each step.
This does not improve performance. :)
It also tries to simplify the maintenance of multiple logging streams, so that tests can be parallelized without too much trouble.
The core system creates a log object with the tag :master for logging during setup and teardown. It is expected that each session object (i.e. each parallel browser instance) will create its own for logging of what happens during the actual session.
Instance Attribute Summary collapse
-
#normal_log ⇒ Object
readonly
The log stream that goes to the replay directory.
-
#replay_log ⇒ Object
readonly
The log stream that goes to STDOUT.
Instance Method Summary collapse
-
#add_to_replay_log(browser, session) ⇒ Object
Adds a screenshot and HTML source into the replay log from the given browser.
-
#initialize(tag, replay = true, replay_path = '%{home}/public_html/watir_replay/%{tag}') ⇒ Logger
constructor
Sets up logging.
-
#method_missing(m, *args, &block) ⇒ Object
Passes on all the normal Logger methods.
Constructor Details
#initialize(tag, replay = true, replay_path = '%{home}/public_html/watir_replay/%{tag}') ⇒ Logger
Sets up logging.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/gless/logger.rb', line 37 def initialize( tag, replay = true, replay_path = '%{home}/public_html/watir_replay/%{tag}' ) require 'logger' require 'fileutils' @ssnum = 0 # For snapshot pictures original_formatter = ::Logger::Formatter.new if replay @replay_path=sprintf(replay_path, { :home => ENV['HOME'], :tag => tag, :replay => replay }) FileUtils.rm_rf(@replay_path) FileUtils.mkdir(@replay_path) replay_log_file = File.open("#{@replay_path}/index.html", "w") @replay_log = ::Logger.new replay_log_file #@replay_log.formatter = proc do |severity, datetime, progname, msg| # # I, [2012-08-14T15:30:10.736784 #14647] INFO -- : <p>Launching remote browser</p> # "<p>#{severity[0]}, [#{datetime} #{progname}]: #{severity} -- : #{msg}</p>\n" #end # Add in the tag and html-ify @replay_log.formatter = proc { |severity, datetime, progname, msg| # Can't flush after from here, so flush prior stuff replay_log_file.flush npn = "#{progname} #{tag} ".sub(/^\s*/,'').sub(/\s*$/,'') stuff=original_formatter.call(severity, datetime, "#{progname} #{tag} ", msg) #"<p>#{ERB::Util.html_escape(stuff.chomp)}</p>\n" "<p>#{stuff.chomp}</p>\n" } @replay_log.level = ::Logger::WARN else @replay_log = nil end @normal_log = ::Logger.new(STDOUT) # Add in the tag @normal_log.formatter = proc { |severity, datetime, progname, msg| original_formatter.call(severity, datetime, "#{progname} #{tag} ", msg) } @normal_log.level = ::Logger::WARN end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &block) ⇒ Object
Passes on all the normal Logger methods. By default, logs to both the normal log and the replay log.
83 84 85 86 87 88 |
# File 'lib/gless/logger.rb', line 83 def method_missing(m, *args, &block) if @replay_log @replay_log.send(m, *args, &block) end @normal_log.send(m, *args, &block) end |
Instance Attribute Details
#normal_log ⇒ Object (readonly)
The log stream that goes to the replay directory. Here in case you need to bypass the normal multi-log semantics.
24 25 26 |
# File 'lib/gless/logger.rb', line 24 def normal_log @normal_log end |
#replay_log ⇒ Object (readonly)
The log stream that goes to STDOUT. Here in case you need to bypass the normal multi-log semantics.
21 22 23 |
# File 'lib/gless/logger.rb', line 21 def replay_log @replay_log end |
Instance Method Details
#add_to_replay_log(browser, session) ⇒ Object
Adds a screenshot and HTML source into the replay log from the given browser.
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/gless/logger.rb', line 95 def add_to_replay_log( browser, session ) if @replay_log @ssnum = @ssnum + 1 if session.get_config :global, :screenshots begin browser.driver.save_screenshot "#{@replay_path}/screenshot_#{@ssnum}.png" if session.get_config :global, :thumbnails require 'mini_magick' image = MiniMagick::Image.open("#{@replay_path}/screenshot_#{@ssnum}.png") image.resize "400" image.write "#{@replay_path}/screenshot_#{@ssnum}_thumb.png" FileUtils.chmod 0755, "#{@replay_path}/screenshot_#{@ssnum}_thumb.png" @replay_log.debug "Screenshot: <a href='screenshot_#{@ssnum}.png'><img src='screenshot_#{@ssnum}_thumb.png' /></a>" else @replay_log.debug "Screenshot: <a href='screenshot_#{@ssnum}.png'>Screenshot</a>" end rescue Exception => e @normal_log.warn "Screenshot failed with exception #{e}" end end html=browser.html htmlFile = File.new("#{@replay_path}/html_capture_#{@ssnum}.txt", "w") htmlFile.write(html) htmlFile.close @replay_log.debug "<a href='html_capture_#{@ssnum}.txt'>HTML Source</a>" @replay_log.debug "Force flush" end end |