Class: Aspera::Log
Overview
Singleton object for logging
Constant Summary collapse
- LOG_TYPES =
Where logs are sent to
i[stderr stdout syslog].freeze
- LEVELS =
Levels are :trace2,:trace1,:debug,:info,:warn,:error,fatal,:unknown
Logger::Severity.constants.sort{ |a, b| Logger::Severity.const_get(a) <=> Logger::Severity.const_get(b)}.map{ |c| c.downcase.to_sym}.freeze
Instance Attribute Summary collapse
-
#dump_format ⇒ Object
Returns the value of attribute dump_format.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#logger_type ⇒ Object
Returns the value of attribute logger_type.
Class Method Summary collapse
-
.apply_colors(value, colors) ⇒ Object
Applies the provided list of string decoration (colors) to the value.
-
.caller_method ⇒ Object
Returns the last 2 containers (module/class) and method caller.
-
.capture_stderr ⇒ Object
Capture the output of $stderr and log it at debug level.
-
.dump(name, object = nil, level: :debug) ⇒ Object
Dump object (‘Hash`) to log using specified level.
-
.log ⇒ Object
Get the logger object of singleton.
-
.obj_dump(name, object) ⇒ String
Dump of object.
Instance Method Summary collapse
- #formatter ⇒ Object
- #formatter=(formatter) ⇒ Object
-
#level ⇒ Symbol
Get symbol of debug level of underlying logger.
-
#level=(new_level) ⇒ Object
Set log level of underlying logger given symbol level.
- #program_name=(value) ⇒ Object
Instance Attribute Details
#dump_format ⇒ Object
Returns the value of attribute dump_format.
140 141 142 |
# File 'lib/aspera/log.rb', line 140 def dump_format @dump_format end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
139 140 141 |
# File 'lib/aspera/log.rb', line 139 def logger @logger end |
#logger_type ⇒ Object
Returns the value of attribute logger_type.
139 140 141 |
# File 'lib/aspera/log.rb', line 139 def logger_type @logger_type end |
Class Method Details
.apply_colors(value, colors) ⇒ Object
Applies the provided list of string decoration (colors) to the value.
71 72 73 |
# File 'lib/aspera/log.rb', line 71 def apply_colors(value, colors) colors.inject(value){ |s, c| s.send(c)} end |
.caller_method ⇒ Object
Returns the last 2 containers (module/class) and method caller
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/aspera/log.rb', line 114 def caller_method stack = caller i = stack.rindex{ |line| line.include?('Logger')} frame = stack[i + 1] if i && stack[i + 1] return '???' unless frame # Extract the "Class::Module::Method" or "Class#method" part full = frame[/'([^']+)'/, 1] return '???' unless full # Split into class/module and method parts parts = full.split(/(::|#)/) # Reconstruct keeping only last two class/module names + separator + method if parts.include?('#') sep_index = parts.index('#') classes = parts[0...sep_index].join method = parts[sep_index + 1] else classes = parts[0..-2].join method = parts.last end class_parts = classes.split('::') selected_classes = class_parts.last(2).join('::') "#{selected_classes}.#{method}" end |
.capture_stderr ⇒ Object
Capture the output of $stderr and log it at debug level
104 105 106 107 108 109 110 111 |
# File 'lib/aspera/log.rb', line 104 def capture_stderr real_stderr = $stderr $stderr = StringIO.new yield if block_given? log.debug($stderr.string) ensure $stderr = real_stderr end |
.dump(name, object = nil, level: :debug) ⇒ Object
Dump object (‘Hash`) to log using specified level
84 85 86 87 88 |
# File 'lib/aspera/log.rb', line 84 def dump(name, object = nil, level: :debug) return unless instance.logger.send(:"#{level}?") object = yield if block_given? instance.logger.send(level, obj_dump(name, object)) end |
.log ⇒ Object
Get the logger object of singleton
76 |
# File 'lib/aspera/log.rb', line 76 def log; instance.logger; end |
.obj_dump(name, object) ⇒ String
Returns Dump of object.
91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/aspera/log.rb', line 91 def obj_dump(name, object) dump_text = case instance.dump_format when :json JSON.pretty_generate(object) rescue PP.pp(object, +'') when :ruby PP.pp(object, +'') else error_unexpected_value(instance.dump_format){'dump format'} end "#{name.to_s.green} (#{instance.dump_format})=\n#{dump_text}" end |
Instance Method Details
#formatter ⇒ Object
165 166 167 |
# File 'lib/aspera/log.rb', line 165 def formatter @logger.formatter end |
#formatter=(formatter) ⇒ Object
154 155 156 157 158 159 160 161 162 163 |
# File 'lib/aspera/log.rb', line 154 def formatter=(formatter) if formatter.is_a?(String) raise Error, "Unknown formatter #{formatter}, use one of: #{FORMATTERS.keys.join(', ')}" unless FORMATTERS.key?(formatter.to_sym) formatter = FORMATTERS[formatter.to_sym] elsif !formatter.respond_to?(:call) && !formatter.is_a?(Logger::Formatter) raise Error, 'Formatter must be a String, a Logger::Formatter or a Proc' end # Update formatter with password hiding @logger.formatter = SecretHider.instance.log_formatter(formatter) end |
#level ⇒ Symbol
Get symbol of debug level of underlying logger
171 172 173 174 |
# File 'lib/aspera/log.rb', line 171 def level Aspera.assert(Logger::SEVERITY_LABEL.key?(@logger.level)) Logger::SEVERITY_LABEL[@logger.level].downcase end |
#level=(new_level) ⇒ Object
Set log level of underlying logger given symbol level
149 150 151 152 |
# File 'lib/aspera/log.rb', line 149 def level=(new_level) Aspera.assert_values(new_level, LEVELS) @logger.level = Logger::Severity.const_get(new_level.to_sym.upcase) end |
#program_name=(value) ⇒ Object
142 143 144 145 |
# File 'lib/aspera/log.rb', line 142 def program_name=(value) @program_name = value self.logger_type = @logger_type end |