]> git.cworth.org Git - sup/blob - lib/sup/logger.rb
skip system buffers when rolling
[sup] / lib / sup / logger.rb
1 module Redwood
2
3 class Logger
4   @@instance = nil
5
6   attr_reader :buf
7
8   def initialize
9     raise "only one Log can be defined" if @@instance
10     @@instance = self
11     @mode = LogMode.new
12     @respawn = true
13     @spawning = false # to prevent infinite loops!
14   end
15
16   ## must be called if you want to see anything!
17   ## once called, will respawn if killed...
18   def make_buf
19     return if @mode.buffer || !BufferManager.instantiated? || !@respawn || @spawning
20     @spawning = true
21     @mode.buffer = BufferManager.instance.spawn "log", @mode, :hidden => true, :system => true
22     @spawning = false
23   end
24
25   def log s
26 #    $stderr.puts s
27     make_buf
28     prefix = "#{Time.now}: "
29     padding = " " * prefix.length
30     first = true
31     s.split(/[\r\n]/).each do |l|
32       l = l.chomp
33       if first
34         first = false
35         @mode << "#{prefix}#{l}\n"
36       else
37         @mode << "#{padding}#{l}\n"
38       end
39     end
40     $stderr.puts "[#{Time.now}] #{s.chomp}" unless BufferManager.instantiated? && @mode.buffer
41   end
42   
43   def self.method_missing m, *a
44     @@instance = Logger.new unless @@instance
45     @@instance.send m, *a
46   end
47
48   def self.buffer
49     @@instance.buf
50   end
51 end
52
53 end
54