Class: ThinkingData::TDLoggerConsumer

Inherits:
Object
  • Object
show all
Defined in:
lib/thinkingdata-ruby/td_logger_consumer.rb

Overview

Write data to file, it works with LogBus

Instance Method Summary collapse

Constructor Details

#initialize(log_path = '.', mode = 'daily', prefix: 'te.log') ⇒ TDLoggerConsumer

Init logger consumer

@param log_path: log file's path
@param mode: file rotate mode
@param prefix: file prefix


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/thinkingdata-ruby/td_logger_consumer.rb', line 31

def initialize(log_path='.', mode='daily', prefix:'te.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)
  @log_path = log_path
  @full_prefix = "#{log_path}/#{prefix}"
  @mutex = Mutex.new
  @owner_pid = Process.pid
  TDLog.info("TDLoggerConsumer init success. LogPath: #{log_path}")
  _reset
end

Instance Method Details

#add(msg) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/thinkingdata-ruby/td_logger_consumer.rb', line 52

def add(msg)
  _reset_after_fork_if_needed
  @mutex.synchronize do
    unless Time.now.strftime(@suffix_mode) == @current_suffix
      @logger.close
      @current_suffix = Time.now.strftime(@suffix_mode)
      _reset
    end
    msg_json_str = msg.to_json
    TDLog.info("Write data to file: #{msg_json_str}")
    @logger.info(msg_json_str)
  end
end

#closeObject



71
72
73
74
75
76
77
# File 'lib/thinkingdata-ruby/td_logger_consumer.rb', line 71

def close
  _reset_after_fork_if_needed
  @mutex.synchronize do
    @logger.close
  end
  TDLog.info("TDLoggerConsumer close.")
end

#flushObject



66
67
68
69
# File 'lib/thinkingdata-ruby/td_logger_consumer.rb', line 66

def flush
  # Logger writes immediately on each call, no explicit flush needed
  TDLog.info("TDLoggerConsumer flush.")
end