Class: YARD::Logger
- Inherits:
-
Logger
- Object
- Logger
- YARD::Logger
- Defined in:
- lib/yard/logging.rb
Overview
Handles console logging for info, warnings and errors. Uses the stdlib Logger class in Ruby for all the backend logic.
Constant Summary collapse
- PROGRESS_INDICATORS =
The list of characters displayed beside the progress bar to indicate “movement”.
%w(⣷ ⣯ ⣟ ⡿ ⢿ ⣻ ⣽ ⣾)
Instance Attribute Summary collapse
-
#show_backtraces ⇒ Boolean
Whether backtraces should be shown (by default this is on).
-
#show_progress ⇒ Boolean
Whether progress indicators should be shown when logging CLIs (by default this is off).
-
#warned ⇒ Object
Returns the value of attribute warned.
Class Method Summary collapse
-
.instance(pipe = STDOUT) ⇒ Logger
The logger instance.
Instance Method Summary collapse
-
#backtrace(exc, level_meth = :error) ⇒ void
Prints the backtrace
exc
to the logger as error data. -
#capture(msg, nontty_log = :debug) { ... } ⇒ void
Captures the duration of a block of code for benchmark analysis.
-
#clear_progress ⇒ void
Clears the progress indicator in the TTY display.
-
#debug(*args) ⇒ Object
Changes the debug level to DEBUG if $DEBUG is set and writes a debugging message.
-
#enter_level(new_level = level) { ... } ⇒ Object
Sets the logger level for the duration of the block.
-
#initialize(pipe, *args) ⇒ Logger
constructor
Creates a new logger.
-
#io ⇒ IO
The IO object being logged to.
- #io=(pipe) ⇒ Object
-
#print(msg = '') ⇒ void
(also: #<<)
Displays an unformatted line to the logger output stream.
-
#progress(msg, nontty_log = :debug) ⇒ void
Displays a progress indicator for a given message.
-
#puts(msg = '') ⇒ void
Displays an unformatted line to the logger output stream, adding a newline.
-
#warn(*args) ⇒ Object
Remembers when a warning occurs and writes a warning message.
-
#warn_no_continuations ⇒ void
deprecated
Deprecated.
Continuations are no longer needed by YARD 0.8.0+.
Constructor Details
#initialize(pipe, *args) ⇒ Logger
Creates a new logger
43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/yard/logging.rb', line 43 def initialize(pipe, *args) super(pipe, *args) self.io = pipe self.show_backtraces = true self.show_progress = false self.level = WARN self.formatter = method(:format_log) self.warned = false @progress_indicator = 0 @mutex = Mutex.new @progress_msg = nil @progress_last_update = Time.now end |
Instance Attribute Details
#show_backtraces ⇒ Boolean
Returns whether backtraces should be shown (by default this is on).
22 |
# File 'lib/yard/logging.rb', line 22 def show_backtraces; @show_backtraces || level == DEBUG end |
#show_progress ⇒ Boolean
Returns whether progress indicators should be shown when logging CLIs (by default this is off).
27 28 29 30 31 32 33 |
# File 'lib/yard/logging.rb', line 27 def show_progress return false if YARD.ruby18? # threading is too ineffective for progress support return false if YARD.windows? # windows has poor ANSI support return false unless io.tty? # no TTY support on IO return false unless level > INFO # no progress in verbose/debug modes @show_progress end |
#warned ⇒ Object
Returns the value of attribute warned.
69 70 71 |
# File 'lib/yard/logging.rb', line 69 def warned @warned end |
Class Method Details
.instance(pipe = STDOUT) ⇒ Logger
The logger instance
38 39 40 |
# File 'lib/yard/logging.rb', line 38 def self.instance(pipe = STDOUT) @logger ||= new(pipe) end |
Instance Method Details
#backtrace(exc, level_meth = :error) ⇒ void
This method returns an undefined value.
Prints the backtrace exc
to the logger as error data.
154 155 156 157 158 159 |
# File 'lib/yard/logging.rb', line 154 def backtrace(exc, level_meth = :error) return unless show_backtraces send(level_meth, "#{exc.class.class_name}: #{exc.}") send(level_meth, "Stack trace:" + exc.backtrace[0..5].map {|x| "\n\t#{x}" }.join + "\n") end |
#capture(msg, nontty_log = :debug) { ... } ⇒ void
Implement capture storage for reporting of benchmarks
This method returns an undefined value.
Captures the duration of a block of code for benchmark analysis. Also calls #progress on the message to display it to the user.
80 81 82 83 84 85 |
# File 'lib/yard/logging.rb', line 80 def capture(msg, nontty_log = :debug) progress(msg, nontty_log) yield ensure clear_progress end |
#clear_progress ⇒ void
This method returns an undefined value.
Clears the progress indicator in the TTY display.
121 122 123 124 125 |
# File 'lib/yard/logging.rb', line 121 def clear_progress return unless show_progress print_no_newline("\e[?25h\e[2K") @progress_msg = nil end |
#debug(*args) ⇒ Object
Changes the debug level to DEBUG if $DEBUG is set and writes a debugging message.
59 60 61 62 |
# File 'lib/yard/logging.rb', line 59 def debug(*args) self.level = DEBUG if $DEBUG super end |
#enter_level(new_level = level) { ... } ⇒ Object
Sets the logger level for the duration of the block
179 180 181 182 183 184 185 |
# File 'lib/yard/logging.rb', line 179 def enter_level(new_level = level) old_level = level self.level = new_level yield ensure self.level = old_level end |
#io ⇒ IO
Returns the IO object being logged to.
17 |
# File 'lib/yard/logging.rb', line 17 def io; @logdev end |
#io=(pipe) ⇒ Object
18 |
# File 'lib/yard/logging.rb', line 18 def io=(pipe) @logdev = pipe end |
#print(msg = '') ⇒ void Also known as: <<
This method returns an undefined value.
Displays an unformatted line to the logger output stream.
143 144 145 146 |
# File 'lib/yard/logging.rb', line 143 def print(msg = '') clear_line print_no_newline(msg) end |
#progress(msg, nontty_log = :debug) ⇒ void
This method returns an undefined value.
Displays a progress indicator for a given message. This progress report is only displayed on TTY displays, otherwise the message is passed to the nontty_log
level.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/yard/logging.rb', line 96 def progress(msg, nontty_log = :debug) send(nontty_log, msg) if nontty_log return unless show_progress icon = "" if defined?(::Encoding) icon = PROGRESS_INDICATORS[@progress_indicator] + " " end @mutex.synchronize do print("\e[2K\e[?25l\e[1m#{icon}#{msg}\e[0m\r") @progress_msg = msg if Time.now - @progress_last_update > 0.2 @progress_indicator += 1 @progress_indicator %= PROGRESS_INDICATORS.size @progress_last_update = Time.now end end Thread.new do sleep(0.05) progress(msg + ".", nil) if @progress_msg == msg end end |
#puts(msg = '') ⇒ void
This method returns an undefined value.
Displays an unformatted line to the logger output stream, adding a newline.
132 133 134 |
# File 'lib/yard/logging.rb', line 132 def puts(msg = '') print("#{msg}\n") end |
#warn(*args) ⇒ Object
Remembers when a warning occurs and writes a warning message.
65 66 67 68 |
# File 'lib/yard/logging.rb', line 65 def warn(*args) self.warned = true super end |
#warn_no_continuations ⇒ void
Continuations are no longer needed by YARD 0.8.0+.
This method returns an undefined value.
Warns that the Ruby environment does not support continuations. Applies to JRuby, Rubinius and MacRuby. This warning will only display once per Ruby process.
167 168 |
# File 'lib/yard/logging.rb', line 167 def warn_no_continuations end |