- Kafka 日志处理器
import json
import logging
from kafka import KafkaProducer
class KafkaHandler(logging.Handler):
def __init__(self, host_list, topic='corp_it_testing', tls=None):
"""
:param host_list: kafka 主机集群地址(ip:port)
:param topic: kafka 主题设置
:param tls:
"""
logging.Handler.__init__(self)
self.producer = KafkaProducer(bootstrap_servers=host_list,
value_serialers=lambda v: json.dumps(v).encode('utf-8'),
linger_ms=10)
self.topic = topic
def emit(self, record):
# 屏蔽 kafka自身日志
if 'kafka' in record.name:
return
try:
msg = self.format(record)
self.producer.send(self.topic, {'message': msg})
self.flush(timeout=1.0)
except Exception:
logging.Handler.handleError(self, record)
def flush(self, timeout=None):
self.producer.flush(timeout=timeout)
def close(self):
self.acquire()
try:
if self.producer:
self.producer.close()
logging.Handler.close(self)
finally:
self.release()
来源:oschina
链接:https://my.oschina.net/u/3208742/blog/4873420