class CustomHandler(logging.Handler): def __init__(self, host, uri, method="POST"): logging.Handler.__init__(self) self.url = "%s/%s" % (host, uri) method = method.upper() if method not in ["GET", "POST"]: raise ValueError("method must be GET or POST") self.method = method def emit(self, record): ''' :param record: :return: ''' msg = self.format(record) if self.method == "GET": if (self.url.find("?") >= 0): sep = '&' else: sep = '?' url = self.url + "%c%s" % (sep, urllib.parse.urlencode({"log": msg})) requests.get(url, timeout=1) else: headers = { "Content-type": "Application/x-www-form-urlencoded", "Content-length": str(len(msg)) } requests.post(self.url, data=https://www.isolves.com/it/cxkf/yy/Python/2020-09-25/{'log': msg}, headers=headers, timeout=1)上面代码中有一行定义发送的参数 msg = self.format(record)
这行代码表示,将会根据日志对象设置的格式返回对应的内容. 之后再将内容通过requests库进行发送,无论使用get 还是post方式,服务端都可以正常的接收到日志 [2020-09-23 11:43:50] [DEBUG] 今天天气不错
三、异步的发送远程日志现在我们考虑一个问题,当日志发送到远程服务器过程中,如果远程服务器处理的很慢,会耗费一定的时间,那么这时记录日志就会都变慢
修改服务器日志处理类,让其停顿5秒钟,模拟长时间的处理流程
async def post(self): print(self.getParam('log')) await asyncio.sleep(5) self.write({"msg": 'ok'})此时我们再打印上面的日志
logger.debug("今天天气不错")logger.debug("是风和日丽的")得到的输出为
[2020-09-23 11:47:33] [DEBUG] 今天天气不错[2020-09-23 11:47:38] [DEBUG] 是风和日丽的我们注意到,它们的时间间隔也是5秒 。
那么现在问题来了 , 原本只是一个记录日志 , 现在却成了拖累整个脚本的累赘 , 所以我们需要异步的来处理远程写日志 。
3.1 使用多线程处理首先想的是应该是用多线程来执行发送日志方法
def emit(self, record): msg = self.format(record) if self.method == "GET": if (self.url.find("?") >= 0): sep = '&' else: sep = '?' url = self.url + "%c%s" % (sep, urllib.parse.urlencode({"log": msg})) t = threading.Thread(target=requests.get, args=(url,)) t.start() else: headers = { "Content-type": "application/x-www-form-urlencoded", "Content-length": str(len(msg)) } t = threading.Thread(target=requests.post, args=(self.url,), kwargs={"data":{'log': msg}, "headers":headers}) t.start()
推荐阅读
- 金骏眉是红茶还是绿茶,骏眉中国之大叶金粹红茶贵州普安大叶种红茶
- Python爬虫案例:爬取微信公众号文章
- 神经网络中的蒸馏技术,从Softmax开始说起
- 一行代码让你的python运行速度提高100倍
- 正史中的关羽真有这么厉害吗 关羽是哪部作品的人物
- 浅谈 React 中的 XSS 攻击
- 抖一中是什么梗?
- 中型犬不掉毛无体味的狗排名如何?
- 为什么有的国家车辆靠左行驶 中国车辆靠左行驶还是靠右行驶
- 三国干涉还辽中的三国指的是
