class TDAnalytics::LoggerConsumer

将数据写入本地文件, 需配合 LogBus 将数据上传到服务器 由于 LogBus 有完善的失败重传机制,因此建议用户首先考虑此方案

Public Class Methods

new(log_path='.', mode='daily', prefix:'tda.log') click to toggle source

LoggerConsumer 构造函数

log_path: 日志文件存放目录
mode: 日志文件切分模式,可选 daily/hourly
prefix: 日志文件前缀,默认为 'tda.log', 日志文件名格式为: tda.log.2019-11-15
# File lib/thinkingdata-ruby/logger_consumer.rb, line 12
def initialize(log_path='.', mode='daily', prefix:'tda.log')
  case mode
  when 'hourly'
    @suffix_mode = '%Y-%m-%d-%H'
  when 'daily'
    @suffix_mode = '%Y-%m-%d'
  else
    raise IllegalParameterError.new("#{mode} is unsupported for LoggerConsumer. Replaced it by daily or hourly")
  end

  raise IllegalParameterError.new("prefix couldn't be empty") if prefix.nil? || prefix.length == 0

  @current_suffix = Time.now.strftime(@suffix_mode)

  @full_prefix = "#{log_path}/#{prefix}."

  _reset
end

Public Instance Methods

add(msg) click to toggle source
# File lib/thinkingdata-ruby/logger_consumer.rb, line 31
def add(msg)
  unless Time.now.strftime(@suffix_mode) == @current_suffix
    @logger.close
    @current_suffix = Time.now.strftime(@suffix_mode)
    _reset
  end
  @logger.info(msg.to_json)
end
close() click to toggle source

关闭 logger

# File lib/thinkingdata-ruby/logger_consumer.rb, line 41
def close
  @logger.close
end

Private Instance Methods

_reset() click to toggle source

重新创建 logger 对象. LogBus 判断新文件会同时考虑文件名和 inode,因此默认的切分方式会导致数据重传

# File lib/thinkingdata-ruby/logger_consumer.rb, line 48
def _reset
  @logger = Logger.new("#{@full_prefix}#{@current_suffix}")
  @logger.level = Logger::INFO
  @logger.formatter = proc do |severity, datetime, progname, msg|
    "#{msg}\n"
  end
end