日志的SocketHandler 不是异步的吗?

时间:2021-07-20 06:10:03

标签: python splunk

我有以下派生的 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 没有响应时等待很长时间。

  1. 如何使其异步?
  2. logging.exception() 也不会将堆栈跟踪发送到 host:port
  3. 如何为 Splunk 设置结构化日志记录?我想在日志中添加一些字段。

0 个答案:

没有答案