您好,登錄后才能下訂單哦!
這篇文章給大家介紹python中handler的作用是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。
1、說明
handler,包含在logging模塊中的三個handler之一。Handler 能覆蓋我們在使用中的大部分情況, 包括將日志記錄到文件中、將日志上傳指定服務器等等。
2、handler的子類
(1)StreamHandler
將日志消息發送到一個 File like的流對象實例中。
(2)FileHandler
將日志記錄到磁盤文件中。
(3)BaseRotatingHandler(FileHandler)
在項目中,為了避免日志文件過大,需要切割日志文件,BaseRotatingHandler 就是切割日志文件處理類的基類。
3、實例
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 # 實例化自定義的日志過濾器 filter = KafkaLogFilter() self.addFilter(filter) # 實例化自定義的日志格式化對象 json_format = JsonForMatter() self.setFormatter(json_format) @staticmethod def on_send_success(record_metadata): # 如果消息成功寫入Kafka,broker將返回RecordMetadata對象(包含topic,partition和offset print("Success: [{}] send success".format(record_metadata)) @staticmethod def on_send_error(excp): # 如果失敗broker將返回error。這時producer收到error會嘗試重試發送消息幾次,直到producer返回error print("INFO " + "send info failed, cause: {}".format(excp)) def emit(self, record): """ 重寫logging.Handler的emit方法 :param record: 傳入的日志信息 :return: """ # 對日志信息進行格式化 value = self.format(record) # 轉成json格式,注意ensure_ascii參數設置為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)
關于python中handler的作用是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。