Module: Logging
- Included in:
- Object
- Defined in:
- lib/story_teller/logging.rb,
lib/story_teller/logging.rb
Overview
The Logging module
Constant Summary collapse
- RubyLogLevels =
{ all: -Float::INFINITY, trace: Logger::TRACE, debug: Logger::DEBUG, info: Logger::INFO, warn: Logger::WARN, error: Logger::ERROR, fatal: Logger::FATAL, unknown: Logger::UNKNOWN, off: Logger::UNKNOWN + 1 }.freeze
- ForwardSlashPattern =
%r{/}.freeze
Class Method Summary collapse
-
.config ⇒ Object
rubocop: disable Metrics/MethodLength.
- .log_level ⇒ Object
-
.log_level=(level) ⇒ Object
rubocop: enable Metrics/CyclomaticComplexity.
Instance Method Summary collapse
- #get_formatted_logger_name(logger_name = nil) ⇒ Object
- #init_java_logger(level = nil, logger_name = nil, source_location = nil) ⇒ Object
- #init_logger(level = :info, logger_name = nil) ⇒ Object
- #init_ruby_logger(level = nil, logger_name = nil, source_location = nil) ⇒ Object
- #log(level = Logging.log_level, log_name = ) ⇒ Object (also: #logger)
- #normalize_ruby_log_level(level) ⇒ Object
- #ruby_log_formatter(severity, datetime, progname, message) ⇒ Object
-
#symbolize_numeric_log_level(level) ⇒ Object
rubocop: disable Metrics/CyclomaticComplexity OFF: 0 FATAL: 100 ERROR: 200 WARN: 300 INFO: 400 DEBUG: 500 TRACE: 600 ALL: 2147483647 See: logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Level.html.
Class Method Details
.config ⇒ Object
rubocop: disable Metrics/MethodLength
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/story_teller/logging.rb', line 32 def config @config ||= begin support_dir_path = File.(__dir__) lib_dir_path = File.(File.dirname(support_dir_path)) project_dir_path = File.(File.dirname(lib_dir_path)) app_name = File.basename(project_dir_path) logs_dir_path = File.(File.join(project_dir_path, 'logs')) FileUtils.mkdir_p(logs_dir_path) log_file = File.(File.join(logs_dir_path, "#{app_name}.log")) { level: :info, name: app_name, lib_dir_path: lib_dir_path, project_dir_path: project_dir_path, logs_dir_path: logs_dir_path, log_file: log_file, rolling_log_file_name_template: "#{app_name}-%d{yyyy-MM-dd}.log.gz", logging_timestamp_format: '%Y-%m-%d %H:%M:%S', logging_pattern_template: { java: '%d{ABSOLUTE} %-5p [%c{1}] %m%n', ruby: "%<timestamp>s %-5<severity>s [%<progname>s] %<msg>s\n" }, schedule: '0 0 0 * * ?', size: '100M' } end end |
.log_level ⇒ Object
204 205 206 |
# File 'lib/story_teller/logging.rb', line 204 def log_level Logging.config[:level] end |
.log_level=(level) ⇒ Object
rubocop: enable Metrics/CyclomaticComplexity
196 197 198 199 200 201 |
# File 'lib/story_teller/logging.rb', line 196 def log_level=(level) raise "Parameter level may not be nil" if level.nil? normalized_level = symbolize_numeric_log_level(level) Logging.config[:level] = normalized_level end |
Instance Method Details
#get_formatted_logger_name(logger_name = nil) ⇒ Object
166 167 168 169 170 |
# File 'lib/story_teller/logging.rb', line 166 def get_formatted_logger_name(logger_name = nil) return logger_name.to_s[/\w+$/] unless logger_name.nil? return name[/\w+$/] if is_a?(Class) || is_a?(Module) self.class.name[/\w+$/] end |
#init_java_logger(level = nil, logger_name = nil, source_location = nil) ⇒ Object
150 151 152 153 154 155 156 |
# File 'lib/story_teller/logging.rb', line 150 def init_java_logger(level = nil, logger_name = nil, source_location = nil) logger_name = get_formatted_logger_name(logger_name) logger_name = source_location.split(ForwardSlashPattern).last if logger_name.empty? log = LogManager.getLogger(logger_name) log.level = Level.to_level(level.to_s.upcase) unless level.nil? log end |
#init_logger(level = :info, logger_name = nil) ⇒ Object
127 128 129 130 |
# File 'lib/story_teller/logging.rb', line 127 def init_logger(level = :info, logger_name = nil) return init_java_logger(level, logger_name, caller[2]) if defined?(Java) init_ruby_logger(level, logger_name, caller[2]) end |
#init_ruby_logger(level = nil, logger_name = nil, source_location = nil) ⇒ Object
141 142 143 144 145 146 147 148 |
# File 'lib/story_teller/logging.rb', line 141 def init_ruby_logger(level = nil, logger_name = nil, source_location = nil) logger_name = get_formatted_logger_name(logger_name) logger_name = source_location.split(ForwardSlashPattern).last if logger_name.empty? log = Logger.new($stdout, progname: logger_name) log.level = normalize_ruby_log_level(level) unless level.nil? log.formatter = method(:ruby_log_formatter) log end |
#log(level = Logging.log_level, log_name = ) ⇒ Object Also known as: logger
209 210 211 |
# File 'lib/story_teller/logging.rb', line 209 def log(level = Logging.log_level, log_name = Logging.config[:app_name]) @log ||= init_logger(level, log_name) end |
#normalize_ruby_log_level(level) ⇒ Object
158 159 160 161 162 163 164 |
# File 'lib/story_teller/logging.rb', line 158 def normalize_ruby_log_level(level) return level if level.is_a?(Integer) RubyLogLevels.fetch(level.to_sym) do raise ArgumentError, "Unknown Ruby log level: #{level.inspect}" end end |
#ruby_log_formatter(severity, datetime, progname, message) ⇒ Object
132 133 134 135 136 137 |
# File 'lib/story_teller/logging.rb', line 132 def ruby_log_formatter(severity, datetime, progname, ) format( Logging.config[:logging_pattern_template][:ruby], timestamp: datetime.strftime(Logging.config[:logging_timestamp_format]), progname: progname, severity: severity, msg: ) end |
#symbolize_numeric_log_level(level) ⇒ Object
rubocop: disable Metrics/CyclomaticComplexity OFF: 0 FATAL: 100 ERROR: 200 WARN: 300 INFO: 400 DEBUG: 500 TRACE: 600 ALL: 2147483647 See: logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Level.html
182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/story_teller/logging.rb', line 182 def symbolize_numeric_log_level(level) case level when 5..Float::INFINITY then :off when 4 then :fatal when 3 then :error when 2 then :warn when 1 then :info when 0 then :debug when -1 then :trace when -Float::INFINITY..-2 then :all end end |