class InfluxdbLogger::InnerLogger
Public Class Methods
new(options, level, initialized_tags, influxdb_tags)
click to toggle source
# File lib/influxdb-logger/logger.rb, line 103 def initialize(options, level, initialized_tags, influxdb_tags) self.level = level @messages_type = (options[:messages_type] || :array).to_sym @tag = options[:tag] @severity_key = (options[:severity_key] || :severity).to_sym @batch_size = options[:batch_size] @interval = options[:interval] @series = options[:series] @retention = options[:retention] @global_tags = {} @last_flush_time = Time.now.to_ms @value_filter = options[:value_filter] || {} @time_precision = options[:time_precision] || 'ns' @influxdb_logger = InfluxDB::Client.new( **options.slice(:host, :port, :database, :retry, :username, :password, :async), time_precision: @time_precision, discard_write_errors: true ) @influxdb_tags = influxdb_tags @severity = 0 @messages = [] @initialized_tags = initialized_tags after_initialize if respond_to? :after_initialize end
Public Instance Methods
[](key)
click to toggle source
# File lib/influxdb-logger/logger.rb, line 130 def [](key) @global_tags[key] end
[]=(key, value)
click to toggle source
# File lib/influxdb-logger/logger.rb, line 134 def []=(key, value) @global_tags[key] = value end
add(severity, message = nil, progname = nil, &block)
click to toggle source
# File lib/influxdb-logger/logger.rb, line 138 def add(severity, message = nil, progname = nil, &block) return true if severity < level message = (block_given? ? block.call : progname) if message.blank? return true if message.blank? add_message(severity, message) true end
add_message(severity, message)
click to toggle source
# File lib/influxdb-logger/logger.rb, line 154 def add_message(severity, message) @severity = severity if @severity < severity values = case message when ::String { message_type: 'String', message: utf8_encoded(message) } when ::Hash message.slice!(*@value_filter[:only]) if @value_filter[:only].present? message.except!(*@value_filter[:except]) if @value_filter[:except].present? message.merge({ message_type: 'Hash' }) when ::Exception { message_type: 'Exception', message: message.message, class: message.class, backtrace: message.backtrace } else { message_type: 'Others', message: message.inspect } end if @tags @initialized_tags.keys.zip(@tags).each do |k, v| values[k] = v end end message = { series: @series, timestamp: Time.now.to_precision(@time_precision), tags: values.slice(*@influxdb_tags).merge(@global_tags), values: values.except(*@influxdb_tags).merge({ severity: format_severity(@severity) }).transform_values {|value| case value when ::Numeric, ::String value when ::Hash value.to_json when ::Symbol value.to_s else value.inspect end } } @messages << message flush if @messages.size >= @batch_size || (Time.now.to_ms - @last_flush_time) > @interval end
close()
click to toggle source
# File lib/influxdb-logger/logger.rb, line 222 def close end
flush()
click to toggle source
# File lib/influxdb-logger/logger.rb, line 213 def flush return if @messages.empty? @influxdb_logger.write_points(@messages, @time_precision, @retention) @severity = 0 @messages.clear @last_flush_time = Time.now.to_ms @tags = nil end
format_severity(severity)
click to toggle source
# File lib/influxdb-logger/logger.rb, line 233 def format_severity(severity) InfluxdbLogger::Logger::SEV_LABEL[severity] || 'ANY' end
level()
click to toggle source
# File lib/influxdb-logger/logger.rb, line 225 def level @level end
level=(l)
click to toggle source
# File lib/influxdb-logger/logger.rb, line 229 def level=(l) @level = l end
utf8_encoded(message)
click to toggle source
# File lib/influxdb-logger/logger.rb, line 146 def utf8_encoded(message) if message.encoding == Encoding::UTF_8 message else message.dup.force_encoding(Encoding::UTF_8) end end