class Gitlab::QA::TestLogger


Common test logger implementation

def console_logger(level:, source:)

Returns:
  • (ActiveSupport::Logger) -

Parameters:
  • source (String) --
  • level () --
def console_logger(level:, source:)
  ActiveSupport::Logger.new($stdout, level: level, datetime_format: TIME_FORMAT).tap do |logger|
    logger.formatter = proc do |severity, datetime, progname, msg|
      msg_prefix = message_prefix(datetime, source, severity)
      Rainbow(msg_prefix).public_send(LEVEL_COLORS.fetch(severity, :silver)) + "#{msg}\n" # rubocop:disable GitlabSecurity/PublicSend
    end
  end
end

def file_logger(source:, path:)

Returns:
  • (ActiveSupport::Logger) -

Parameters:
  • path (String) --
  • source (String) --
def file_logger(source:, path:)
  log_file = "#{path}/#{source.downcase.tr(' ', '-')}.log"
  ActiveSupport::Logger.new(log_file, level: :debug, datetime_format: TIME_FORMAT).tap do |logger|
    logger.formatter = proc do |severity, datetime, progname, msg|
      msg_prefix = message_prefix(datetime, source, severity)
      "#{msg_prefix}#{msg}\n".gsub(/\e\[(\d+)(?:;\d+)*m/, "")
    end
  end
end

def logger(level: :info, source: 'Gitlab QA', path: 'tmp')

Returns:
  • (ActiveSupport::Logger) -

Parameters:
  • source (String) --
  • level () --
def logger(level: :info, source: 'Gitlab QA', path: 'tmp')
  console_log = console_logger(level: level, source: source)
  file_log = file_logger(source: source, path: path)
  console_log.extend(ActiveSupport::Logger.broadcast(file_log))
end

def message_prefix(date, source, severity)

Returns:
  • (String) -

Parameters:
  • severity (String) --
  • source (String) --
  • date (DateTime) --

Other tags:
    Note: - when outputted, the date will be formatted as "Jun 07 2022 11:30:00 UTC"
def message_prefix(date, source, severity)
  "[#{date.strftime('%h %d %Y %H:%M:%S %Z')} (#{source})] #{severity.ljust(5)} -- "
end