Class: God::Logger

Inherits:
SimpleLogger show all
Defined in:
lib/god/logger.rb

Constant Summary

Constants inherited from SimpleLogger

SimpleLogger::CONSTANT_TO_SYMBOL, SimpleLogger::DEBUG, SimpleLogger::ERROR, SimpleLogger::FATAL, SimpleLogger::INFO, SimpleLogger::SEV_LABEL, SimpleLogger::WARN

Class Attribute Summary collapse

Instance Attribute Summary collapse

Attributes inherited from SimpleLogger

#datetime_format, #level

Instance Method Summary collapse

Methods inherited from SimpleLogger

#debug, #error, #fatal, #info, #output, #warn

Constructor Details

#initialize(io = $stdout) ⇒ Logger

Instantiate a new Logger object


14
15
16
17
18
19
20
21
22
23
# File 'lib/god/logger.rb', line 14

def initialize(io = $stdout)
  super(io)
  self.logs = {}
  @mutex = Mutex.new
  @capture = nil
  @spool = Time.now - 10
  @templogio = StringIO.new
  @templog = SimpleLogger.new(@templogio)
  @templog.level = Logger::INFO
end

Class Attribute Details

.syslogObject

Returns the value of attribute syslog


8
9
10
# File 'lib/god/logger.rb', line 8

def syslog
  @syslog
end

Instance Attribute Details

#logsObject

Returns the value of attribute logs


5
6
7
# File 'lib/god/logger.rb', line 5

def logs
  @logs
end

Instance Method Details

#finish_captureObject

Disable capturing of log and return what was captured since capturing was enabled with Logger#start_capture

Returns String


100
101
102
103
104
105
106
# File 'lib/god/logger.rb', line 100

def finish_capture
  @mutex.synchronize do
    cap = @capture.string if @capture
    @capture = nil
    cap
  end
end

#level=(lev) ⇒ Object


26
27
28
29
# File 'lib/god/logger.rb', line 26

def level=(lev)
  SysLogger.level = SimpleLogger::CONSTANT_TO_SYMBOL[lev] if Logger.syslog
  super(lev)
end

#log(watch, level, text) ⇒ Object

Log a message

+watch+ is the String name of the Watch (may be nil if not Watch is applicable)
+level+ is the log level [:debug|:info|:warn|:error|:fatal]
+text+ is the String message

Returns nothing


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/god/logger.rb', line 37

def log(watch, level, text)
  # initialize watch log if necessary
  self.logs[watch.name] ||= Timeline.new(God::LOG_BUFFER_SIZE_DEFAULT) if watch

  # push onto capture and timeline for the given watch
  if @capture || (watch && (Time.now - @spool < 2))
    @mutex.synchronize do
      @templogio.truncate(0)
      @templogio.rewind
      @templog.send(level, text)

      message = @templogio.string.dup

      if @capture
        @capture.puts(message)
      else
        self.logs[watch.name] << [Time.now, message]
      end
    end
  end

  # send to regular logger
  self.send(level, text)

  # send to syslog
  SysLogger.log(level, text) if Logger.syslog
end

#start_captureObject

Enable capturing of log

Returns nothing


90
91
92
93
94
# File 'lib/god/logger.rb', line 90

def start_capture
  @mutex.synchronize do
    @capture = StringIO.new
  end
end

#watch_log_since(watch_name, since) ⇒ Object

Get all log output for a given Watch since a certain Time.

+watch_name+ is the String name of the Watch
+since+ is the Time since which to fetch log lines

Returns String


70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/god/logger.rb', line 70

def watch_log_since(watch_name, since)
  # initialize watch log if necessary
  self.logs[watch_name] ||= Timeline.new(God::LOG_BUFFER_SIZE_DEFAULT)

  # get and join lines since given time
  @mutex.synchronize do
    @spool = Time.now
    self.logs[watch_name].select do |x|
      x.first > since
    end.map do |x|
      x[1]
    end.join
  end
end