Class: Betterlog::Logger

Inherits:
Logger
  • Object
show all
Includes:
Enumerable
Defined in:
lib/betterlog/logger.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(redis, shift_age = 0, shift_size = 1048576, name: nil, buffer_size: nil, **opts) ⇒ Logger

Returns a new instance of Logger.



5
6
7
8
9
10
# File 'lib/betterlog/logger.rb', line 5

def initialize(redis, shift_age = 0, shift_size = 1048576, name: nil, buffer_size: nil, **opts)
  @redis       = redis
  @name        = name || self.class.name
  @buffer_size = determine_buffer_size(buffer_size)
  super(nil, shift_age, shift_size, **opts)
end

Class Method Details

.for_redis_url(url, shift_age = 0, shift_size = 1048576, **opts) ⇒ Object



12
13
14
15
16
17
# File 'lib/betterlog/logger.rb', line 12

def self.for_redis_url(url, shift_age = 0, shift_size = 1048576,  **opts)
  redis = Redis.new(url: url)
  redis.ping
  new(redis, shift_age, shift_size, **opts)
rescue Redis::CannotConnectError
end

Instance Method Details

#<<(msg) ⇒ Object



65
66
67
# File 'lib/betterlog/logger.rb', line 65

def <<(msg)
  redis_write(msg)
end

#add(severity, message = nil, progname = nil) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/betterlog/logger.rb', line 44

def add(severity, message = nil, progname = nil)
  severity ||= UNKNOWN
  if severity < @level
    return true
  end
  if progname.nil?
    progname = @progname
  end
  if message.nil?
    if block_given?
      message = yield
    else
      message = progname
      progname = @progname
    end
  end
  redis_write(
    format_message(format_severity(severity), Time.now, progname, message))
  true
end

#clearObject



69
70
71
72
# File 'lib/betterlog/logger.rb', line 69

def clear
  @redis.del @name
  self
end

#each(chunk_size: 100 * 1024, &block) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/betterlog/logger.rb', line 90

def each(chunk_size: 100 * 1024, &block)
  chunk_size > 0 or raise ArgumentError, 'chunk_size > 0 required'
  Enumerator.new do |y|
    buffer = ''
    each_chunk(chunk_size: chunk_size) do |chunk|
      buffer << chunk
      buffer.gsub!(/\A(.*?#$/)/) do |line|
        y.yield(line)
        ''
      end
    end
    buffer.length > 0 and y.yield(buffer)
  end.each(&block)
end

#each_chunk(chunk_size: 100 * 1024, &block) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/betterlog/logger.rb', line 74

def each_chunk(chunk_size: 100 * 1024, &block)
  chunk_size > 0 or raise ArgumentError, 'chunk_size > 0 required'
  @redis.exists(@name) or return Enumerator.new {}
  Enumerator.new do |y|
    name_tmp = "#{@name}_#{rand}"
    @redis.rename @name, name_tmp
    s = 0
    e = @redis.strlen(name_tmp) - 1
    until s > e
      y.yield @redis.getrange(name_tmp, s, s + chunk_size - 1)
      s += chunk_size
    end
    @redis.del name_tmp
  end.each(&block)
end