class Fluent::Plugin::KubernetesLogLevelFilter

Public Instance Methods

configure(conf) click to toggle source
Calls superclass method
# File lib/fluent/plugin/filter_kubernetes_log_level.rb, line 28
def configure(conf)
    super
end
filter(tag, time, record) click to toggle source
# File lib/fluent/plugin/filter_kubernetes_log_level.rb, line 55
def filter(tag, time, record)
  
  log.trace "Start to process record"

  log_level_key = @default_log_level_key
  logging_level = @default_logging_level
  app = 'app'

  if record.has_key?("kubernetes")
    if record["kubernetes"].has_key?("labels")
      if record["kubernetes"]["labels"].has_key?('app')
        app = record['kubernetes']['labels']['app']
      end

      if record["kubernetes"]["labels"].has_key?(@log_level_key_label)
        log_level_key = record['kubernetes']['labels'][@log_level_key_label]
        log.debug "[App: #{app}]: kubernetes.labels.#{@log_level_key_label} found with the value #{log_level_key}"
      end

      if record["kubernetes"]["labels"].has_key?(@log_level_label)
        logging_level = record['kubernetes']['labels'][@log_level_label]
        log.debug "[App: #{app}]: kubernetes.labels.#{@log_level_label} found with the value #{logging_level}"
      end
    end
  end

  numeric_logging_level = level_to_num(logging_level)

  log.trace "Process current log level"
  
  if record.has_key?(log_level_key.capitalize)
    log.debug "[App: #{app}]: Downcasing capitalized log_level from #{log_level_key.capitalize}"
    current_log_level = record[log_level_key.capitalize]
  elsif record.has_key?(log_level_key)
    current_log_level = record[log_level_key]
  else
    log.warn "[App: #{app}]: log level key #{log_level_key} not found in record"
    return nil
  end
  
  numeric_level = level_to_num(current_log_level)
  if numeric_level >= numeric_logging_level
    log.debug "[App: #{app}]: Emitting record with #{current_log_level} level"
    record
  else
    log.debug "[App: #{app}]: Dropping record with #{current_log_level} level"
    nil
  end
end
level_to_num(level) click to toggle source
# File lib/fluent/plugin/filter_kubernetes_log_level.rb, line 32
def level_to_num(level)
  if not level.is_a? String
    return level.to_i
  end

  case level.downcase
  when 'trace', 'verbose'
    10
  when 'debug'
    20
  when 'info', 'information'
    30
  when 'warning', 'warn'
    40
  when 'error'
    50
  when 'fatal'
    60
  else
    level.to_i
  end
end