Module: Puppet::Util::Logging
- Included in:
- Puppet, FileServing::Mount, Module, Network::AuthStore, Parameter, Parser::Resource, Provider, Resource::Status, Transaction::Event, Type, Type, Puppet::Util::Log::RateLimitedLogger, ResourceTemplate
- Defined in:
- lib/puppet/util/logging.rb
Defined Under Namespace
Classes: DeprecationWarning
Instance Method Summary collapse
- #clear_deprecation_warnings ⇒ Object
-
#deprecation_warning(message) ⇒ Object
Log a warning indicating that the code path is deprecated.
- #format_exception(exception, message = :default, trace = true) ⇒ Object
- #get_deprecation_offender ⇒ Object
- #log_and_raise(exception, message) ⇒ Object
-
#log_deprecations_to_file(deprecations_file, pattern = nil) ⇒ Object
utility method that can be called, e.g., from spec_helper config.after, when tracking down calls to deprecated code.
-
#log_exception(exception, message = :default, options = {}) ⇒ Object
Log an exception via Puppet.err.
- #send_log(level, message) ⇒ Object
Instance Method Details
#clear_deprecation_warnings ⇒ Object
84 85 86 |
# File 'lib/puppet/util/logging.rb', line 84 def clear_deprecation_warnings $deprecation_warnings.clear if $deprecation_warnings end |
#deprecation_warning(message) ⇒ Object
Log a warning indicating that the code path is deprecated. Note that this method keeps track of the offending lines of code that triggered the deprecation warning, and will only log a warning once per offending line of code. It will also stop logging deprecation warnings altogether after 100 unique deprecation warnings have been logged. Parameters:
- message
-
The message to log (logs via )
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/puppet/util/logging.rb', line 64 def deprecation_warning() $deprecation_warnings ||= {} if $deprecation_warnings.length < 100 then offender = get_deprecation_offender() if (! $deprecation_warnings.has_key?(offender)) then $deprecation_warnings[offender] = warning("#{message}\n (at #{offender})") end end end |
#format_exception(exception, message = :default, trace = true) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/puppet/util/logging.rb', line 30 def format_exception(exception, = :default, trace = true) arr = [] case when :default arr << exception. when nil # don't log anything if they passed a nil; they are just calling for the optional backtrace logging else arr << end if trace and exception.backtrace arr << Puppet::Util.pretty_backtrace(exception.backtrace) end if exception.respond_to?(:original) and exception.original arr << "Wrapped exception:" arr << format_exception(exception.original, :default, trace) end arr.flatten.join("\n") end |
#get_deprecation_offender ⇒ Object
75 76 77 78 79 80 81 82 |
# File 'lib/puppet/util/logging.rb', line 75 def get_deprecation_offender() # we have to put this in its own method to simplify testing; we need to be able to mock the offender results in # order to test this class, and our framework does not appear to enjoy it if you try to mock Kernel.caller # # let's find the offending line; we need to jump back up the stack a few steps to find the method that called # the deprecated method caller()[2] end |
#log_and_raise(exception, message) ⇒ Object
51 52 53 54 |
# File 'lib/puppet/util/logging.rb', line 51 def log_and_raise(exception, ) log_exception(exception, ) raise exception, + "\n" + exception.to_s, exception.backtrace end |
#log_deprecations_to_file(deprecations_file, pattern = nil) ⇒ Object
utility method that can be called, e.g., from spec_helper config.after, when tracking down calls to deprecated code. Parameters:
- deprecations_file
-
relative or absolute path of a file to log the deprecations to
- pattern
-
(default nil) if specified, will only log deprecations whose message matches the provided pattern
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/puppet/util/logging.rb', line 96 def log_deprecations_to_file(deprecations_file, pattern = nil) # this method may get called lots and lots of times (e.g., from spec_helper config.after) without the global # list of deprecation warnings being cleared out. We don't want to keep logging the same offenders over and over, # so, we need to keep track of what we've logged. # # It'd be nice if we could just clear out the list of deprecation warnings, but then the very next spec might # find the same offender, and we'd end up logging it again. $logged_deprecation_warnings ||= {} File.open(deprecations_file, "a") do |f| if ($deprecation_warnings) then $deprecation_warnings.each do |offender, | if (! $logged_deprecation_warnings.has_key?(offender)) then $logged_deprecation_warnings[offender] = true if ((pattern.nil?) || ( =~ pattern)) then f.puts() f.puts(offender) f.puts() end end end end end end |
#log_exception(exception, message = :default, options = {}) ⇒ Object
Log an exception via Puppet.err. Will also log the backtrace if Puppet is set. Parameters:
- exception
-
an Exception to log
- message
-
an optional String overriding the message to be logged; by default, we log Exception.message.
If you pass a String here, your string will be logged instead. You may also pass nil if you don't
wish to log a message at all; in this case it is likely that you are only calling this method in order
to take advantage of the backtrace logging.
26 27 28 |
# File 'lib/puppet/util/logging.rb', line 26 def log_exception(exception, = :default, = {}) err(format_exception(exception, , Puppet[:trace] || [:trace])) end |
#send_log(level, message) ⇒ Object
7 8 9 |
# File 'lib/puppet/util/logging.rb', line 7 def send_log(level, ) Puppet::Util::Log.create({:level => level, :source => log_source, :message => }.merge()) end |