我有以下派生的 SocketHandler
用于 Python 日志记录。
class SplunkHandler(SocketHandler):
def __init__(self, host, port):
SocketHandler.__init__(self, host, port)
def makePickle(self, record):
ei = record.exc_info
if ei:
dummy = self.format(record)
d = dict(record.__dict__)
d['asctime'] = time.strftime('%Y-%m-%d %H:%M:%S%z', time.localtime(d['created']))
s = "{asctime} {levelname} {filename} - {msg}".format(**d)
return bytes(s +"\n", 'utf8')
def makeSocket(self, timeout=1):
context = ssl.create_default_context()
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
try:
context.load_verify_locations(CERT_FILE)
result = context.wrap_socket(socket.create_connection(self.address),
server_hostname=self.address[0])
except Exception as ex:
print(f"Exception {ex}")
raise
return result
日志设置为,
logger = logging.getLogger('')
formatter = logging.Formatter(fmt='%(asctime)s %(levelname)-8s %(threadName)s %(filename)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
host = '....'
port = '....'
handler = SplunkHandler(host, port)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
我发现语句 logging.info('test')
阻塞并在远程 host:port
没有响应时等待很长时间。
logging.exception()
也不会将堆栈跟踪发送到 host:port
?