您好,登錄后才能下訂單哦!
這篇文章給大家介紹python中handler的作用是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
Python是一種編程語(yǔ)言,內(nèi)置了許多有效的工具,Python幾乎無(wú)所不能,該語(yǔ)言通俗易懂、容易入門(mén)、功能強(qiáng)大,在許多領(lǐng)域中都有廣泛的應(yīng)用,例如最熱門(mén)的大數(shù)據(jù)分析,人工智能,Web開(kāi)發(fā)等。
1、說(shuō)明
handler,包含在logging模塊中的三個(gè)handler之一。Handler 能覆蓋我們?cè)谑褂弥械拇蟛糠智闆r, 包括將日志記錄到文件中、將日志上傳指定服務(wù)器等等。
2、handler的子類(lèi)
(1)StreamHandler
將日志消息發(fā)送到一個(gè) File like的流對(duì)象實(shí)例中。
(2)FileHandler
將日志記錄到磁盤(pán)文件中。
(3)BaseRotatingHandler(FileHandler)
在項(xiàng)目中,為了避免日志文件過(guò)大,需要切割日志文件,BaseRotatingHandler 就是切割日志文件處理類(lèi)的基類(lèi)。
3、實(shí)例
import json from kafka import KafkaProducer from kafka.errors import KafkaError import logging import datetime class KafkaLoggingHandler(logging.Handler): """ 自定義logging.Handler模塊,自定義將日志輸出到指定位置(這里是輸出到kafka) """ def __init__(self, config=None, topic=None, name=""): super(KafkaLoggingHandler, self).__init__() if isinstance(config, dict) is False: raise ValueError("lack of kafka config parameters...") if isinstance(topic, str) is False: raise ValueError("lack of kafka topic parameters...") self.name = name self.config = config self.producer = KafkaProducer(**self.config) self.topic = topic # 實(shí)例化自定義的日志過(guò)濾器 filter = KafkaLogFilter() self.addFilter(filter) # 實(shí)例化自定義的日志格式化對(duì)象 json_format = JsonForMatter() self.setFormatter(json_format) @staticmethod def on_send_success(record_metadata): # 如果消息成功寫(xiě)入Kafka,broker將返回RecordMetadata對(duì)象(包含topic,partition和offset print("Success: [{}] send success".format(record_metadata)) @staticmethod def on_send_error(excp): # 如果失敗broker將返回error。這時(shí)producer收到error會(huì)嘗試重試發(fā)送消息幾次,直到producer返回error print("INFO " + "send info failed, cause: {}".format(excp)) def emit(self, record): """ 重寫(xiě)logging.Handler的emit方法 :param record: 傳入的日志信息 :return: """ # 對(duì)日志信息進(jìn)行格式化 value = self.format(record) # 轉(zhuǎn)成json格式,注意ensure_ascii參數(shù)設(shè)置為False,否則中文亂碼 value = json.dumps(value, ensure_ascii=False).encode("utf-8") future = self.producer.send(topic=self.topic, value=value) try: record_metadata = future.get(timeout=10) self.on_send_success(record_metadata) except KafkaError as e: self.on_send_error(e)
關(guān)于python中handler的作用是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。