Skip to content

Commit

Permalink
Make last error handling thread safe. ref #11
Browse files Browse the repository at this point in the history
  • Loading branch information
repeatedly committed Nov 8, 2013
1 parent e63a40e commit 9801fde
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions lib/fluent/logger/fluent_logger.rb
Expand Up @@ -94,12 +94,12 @@ def initialize(tag_prefix, *args)
end
end

@last_error = nil
@last_error = {}

begin
connect!
rescue => e
@last_error = e
set_last_error(e)
@logger.error "Failed to connect fluentd: #{$!}"
@logger.error "Connection will be retried."
end
Expand All @@ -108,6 +108,10 @@ def initialize(tag_prefix, *args)
attr_accessor :limit, :logger, :log_reconnect_error_threshold
attr_reader :last_error

def last_error
@last_error[Thread.current.object_id]
end

def post_with_time(tag, map, time)
@logger.debug { "event: #{tag} #{map.to_json}" rescue nil }
tag = "#{@tag_prefix}.#{tag}" if @tag_prefix
Expand All @@ -120,7 +124,7 @@ def close
begin
send_data(@pending)
rescue => e
@last_error = e
set_last_error(e)
@logger.error("FluentLogger: Can't send logs to #{@host}:#{@port}: #{$!}")
end
end
Expand Down Expand Up @@ -160,7 +164,7 @@ def write(msg)
begin
data = to_msgpack(msg)
rescue => e
@last_error = e
set_last_error(e)
@logger.error("FluentLogger: Can't convert to msgpack: #{msg.inspect}: #{$!}")
return false
end
Expand All @@ -184,7 +188,7 @@ def write(msg)
@pending = nil
true
rescue => e
@last_error = e
set_last_error(e)
if @pending.bytesize > @limit
@logger.error("FluentLogger: Can't send logs to #{@host}:#{@port}: #{$!}")
@pending = nil
Expand Down Expand Up @@ -239,6 +243,11 @@ def connect!
def log_reconnect_error
@logger.error("FluentLogger: Can't connect to #{@host}:#{@port}(#{@connect_error_history.size} retried): #{$!}")
end

def set_last_error(e)
# TODO: Check non GVL env
@last_error[Thread.current.object_id] = e
end
end


Expand Down

0 comments on commit 9801fde

Please sign in to comment.