class GoodData::Bricks::LoggerMiddleware

Public Instance Methods

call(params) click to toggle source
# File lib/gooddata/bricks/middleware/logger_middleware.rb, line 31
def call(params)
  params = params.to_hash
  if params['GDC_LOGGING_OFF']
    logger = NilLogger.new
  elsif params['GDC_LOG_DIRECTORY'] && params['GDC_EXECUTION_ID']
    log_directory = params['GDC_LOG_DIRECTORY']
    execution_id = params['GDC_EXECUTION_ID']
    FileUtils.mkpath log_directory
    execution_log_path = params['GDC_EXECUTION_LOG_PATH'].nil? ? "#{log_directory}/#{execution_id}.log" : params['GDC_EXECUTION_LOG_PATH']
    logger = Logger.new(execution_log_path)
    logger.level = params['GDC_LOG_LEVEL'] || 'info'
    values_to_mask = params['values_to_mask'] || []
    logger = MaskLoggerDecorator.new(logger, values_to_mask)
  else
    logger = params[:GDC_LOGGER_FILE].nil? ? Logger.new(STDOUT) : Logger.new(params[:GDC_LOGGER_FILE])
    logger.level = params['GDC_LOG_LEVEL'] || 'info'
  end
  GoodData.logger = logger
  request_id = params.include?('GDC_REQUEST_ID') ? ", request_id=#{params['GDC_REQUEST_ID']}" : ''
  logger.info("Pipeline starts #{request_id}")
  params['GDC_LOGGER'] = logger
  GoodData.logging_http_on if params['HTTP_LOGGING'] && params['HTTP_LOGGING'].to_b

  unless params['NO_SPLUNK_LOGGING'] && params['NO_SPLUNK_LOGGING'].to_b
    GoodData.logger.info "Statistics collecting is turned ON. All the data is anonymous."
    # NODE_NAME is set up by k8s execmgr
    syslog_node = ENV['NODE_NAME']
    splunk_file_logger = syslog_node ? RemoteSyslogLogger.new(syslog_node, 514, program: "lcm_ruby_brick", facility: 'local2') : Logger.new(STDOUT)
    splunk_logger = SplunkLoggerDecorator.new splunk_file_logger
    splunk_logger.level = params['SPLUNK_LOG_LEVEL'] || GoodData::DEFAULT_SPLUNKLOG_LEVEL
    splunk_logger = splunk_logger.extend(ContextLoggerDecorator)
    splunk_logger.context_source = GoodData.gd_logger
    splunk_logger = MaskLoggerDecorator.new(splunk_logger, params)
    GoodData.splunk_logging_on splunk_logger
  end

  # Initialize context: Execution ID
  GoodData.gd_logger.execution_id = params['GDC_EXECUTION_ID'] || SecureRandom.urlsafe_base64(16)

  returning(@app.call(params)) do |_result|
    logger.info('Pipeline ending')
  end
end