class ActFluentLoggerRails::FluentLogger

Public Class Methods

new(options, level, log_tags) click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 80
def initialize(options, level, log_tags)
  self.level = level
  port    = options[:port]
  host    = options[:host]
  nanosecond_precision = options[:nanosecond_precision]
  @messages_type = (options[:messages_type] || :array).to_sym
  @tag = options[:tag]
  @severity_key = (options[:severity_key] || :severity).to_sym
  @flush_immediately = options[:flush_immediately]
  logger_opts = {host: host, port: port, nanosecond_precision: nanosecond_precision}
  logger_opts[:tls_options] = options[:tls_options] unless options[:tls_options].nil?
  @fluent_logger = ::Fluent::Logger::FluentLogger.new(nil, logger_opts)
  @severity = 0
  @log_tags = log_tags
  after_initialize if respond_to?(:after_initialize) && Rails::VERSION::MAJOR < 6
end

Public Instance Methods

[](key) click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 128
def [](key)
  map[key]
end
[]=(key, value) click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 132
def []=(key, value)
  map[key] = value
end
add(severity, message = nil, progname = nil, &block) click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 97
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/act-fluent-logger-rails/logger.rb, line 105
def add_message(severity, message)
  @severity = severity if @severity < severity

  message =
    case message
    when ::String
      message
    when ::Exception
      "#{ message.message } (#{ message.class })\n" <<
        (message.backtrace || []).join("\n")
    else
      message.inspect
    end

  if message.encoding == Encoding::UTF_8
    logger_messages << message
  else
    logger_messages << message.dup.force_encoding(Encoding::UTF_8)
  end

  flush if @flush_immediately
end
add_tags() click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 154
def add_tags
  return unless @tags_thread_key && Thread.current.key?(@tags_thread_key)
  @log_tags.keys.zip(Thread.current[@tags_thread_key]).each do |k, v|
    map[k] = v
  end
end
close() click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 171
def close
  @fluent_logger.close
end
flush() click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 136
def flush
  return if logger_messages.empty?
  messages = if @messages_type == :string
               logger_messages.join("\n")
             else
               logger_messages
             end
  map[:messages] = messages
  map[@severity_key] = format_severity(@severity)
  add_tags

  @fluent_logger.post(@tag, map)
  @severity = 0
  logger_messages.clear
  Thread.current[@tags_thread_key] = nil if @tags_thread_key
  map.clear
end
format_severity(severity) click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 183
def format_severity(severity)
  ActFluentLoggerRails::Logger::SEV_LABEL[severity] || 'ANY'
end
level() click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 175
def level
  @level
end
level=(l) click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 179
def level=(l)
  @level = l
end
logger_messages() click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 161
def logger_messages
  @messages_thread_key ||= "fluentd_logger_messages:#{object_id}".freeze
  Thread.current[@messages_thread_key] ||= []
end
map() click to toggle source
# File lib/act-fluent-logger-rails/logger.rb, line 166
def map
  @map_thread_key ||= "fluentd_logger_map:#{object_id}".freeze
  Thread.current[@map_thread_key] ||= {}
end