1
1
# -*- coding: utf-8 -*-
2
2
3
+ import socket
3
4
import threading
4
5
from queue import Queue , Full , Empty
5
6
@@ -81,11 +82,7 @@ def close(self, flush=True):
81
82
return
82
83
self ._closed = True
83
84
if not flush :
84
- while True :
85
- try :
86
- self ._queue .get (block = False )
87
- except Empty :
88
- break
85
+ self ._clear_queue ()
89
86
self ._queue .put (_TOMBSTONE )
90
87
self ._send_thread .join ()
91
88
@@ -101,6 +98,13 @@ def queue_blocking(self):
101
98
def queue_circular (self ):
102
99
return self ._queue_circular
103
100
101
+ def _clear_queue (self ):
102
+ while True :
103
+ try :
104
+ self ._queue .get (block = False )
105
+ except Empty :
106
+ break
107
+
104
108
def _send (self , bytes_ ):
105
109
with self .lock :
106
110
if self ._closed :
@@ -120,8 +124,20 @@ def _send(self, bytes_):
120
124
121
125
return True
122
126
127
+ def _send_internal (self , bytes_ ):
128
+ send_internal_result = super (FluentSender , self )._send_internal (bytes_ )
129
+ if send_internal_result is False :
130
+ # when send_result is False, super() caught socket.error
131
+ # and assigned the error to self.last_error
132
+ if isinstance (self .last_error , socket .gaierror ):
133
+ # clear the queue to avoid blocking and print the log
134
+ self ._clear_queue ()
135
+ print ("%s. Please check address: (%s, %s)" % (str (self .last_error ), self .host , self .port ))
136
+
137
+ return send_internal_result
138
+
123
139
def _send_loop (self ):
124
- send_internal = super ( FluentSender , self ) ._send_internal
140
+ send_internal = self ._send_internal
125
141
126
142
try :
127
143
while True :
0 commit comments